2013-07-19 2 views
1

이 테마에 대한 게시물을 거의 보지 못했지만 원하는 것을 얻기 위해 여전히 문제가 있습니다. 내 이전 URL의이 같은했다 :문제 밑줄을 .htaccess로 하이픈으로 바꾸기

http://myhostname.com/offer/1234_Nice_Offer_Cool_Whatever_HEllyeah.htm 

그리고 분명히 나는 ​​그들을 다시 할 :

http://myhostname.com/offer/1234-nice-offer-cool-whatever-hellyeah.htm 

이것은 내가 htaccess로에서 시도 코드.

RewriteCond %{REQUEST_URI} \.htm$ [NC]  
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [E=underscores:Yes,N] 
RewriteCond %{ENV:underscores} ^Yes$ 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L] 

그래서, 규칙이 PAIRE이 URL의 등으로 잘 작동

:

http://myhostname.com/1234_Some_Section_hellyeah.htm 

하지만이 같은 시도 할 때 그들이 어떤 디렉토리가없는 URL의에 밑줄을 대체하기 위해 잘 작동 URL의 등에 코드 :

http://myhostname.com/dir1/dir2/dir3/1234_Some_Offer_Or_Section.htm 

그런 다음, 서버는 내가 방법은 당 디렉토리에 영향을 미치는 알고 싶습니다, 기본적으로 무한 루프합니다 ([N] 플래그의 I 그림 ...) 한다 이 규칙에 대한 URL 및이 무한 루프가 발생하는 이유는 무엇입니까? 감사!

답변

2

N 플래그가 필요하지 않습니다. 하이픈으로 밑줄을 교체하려면 재귀 코드가 작동합니다 다음

RewriteRule ^([^_]+)_(.+?\.htm)$ $1-$2 [L,NC,E=underscores:Yes] 

RewriteCond %{ENV:REDIRECT_underscores} ^Yes$ 
RewriteRule ^([^_]+)$ /$1 [R=301,L] 
+0

감사 @anubhava, 나는이 규칙을 시도하지만 301 리디렉션이 수행되지 않습니다 ... – talisker

+0

흠 내가 광범위한 테스트 후 게시했다. 귀하의 Apache 버전이 env 변수를 지원합니까? – anubhava

+0

다른 규칙을 사용한 테스트가 효과적이기 때문에 그렇게 생각합니다. 내 버전은 Apache/2.2.16입니다. 우리는 첫 줄에 [L] 플래그가 필요 없다고 생각합니다. 이 에뮬레이터 http://htaccess.madewithlove.be/와 함께 귀하의 규칙을 시험해 보았습니다. – talisker