2009-09-01 7 views
1
Redirect 301 /resort.php/FOO/BAR http://www.sitename.com.com/index.php 
RewriteRule ^/direct/(.*) /direct/$1 [QSA,L] # access non i18n files directly 
RewriteRule ^/([a-z]{2}\/.*)  /$1 [QSA,L] #any language subdirectory should be left alone 
RewriteRule ^/(.*\/$)    /en/$1index.php [QSA,L] #fix for links ending in/
RewriteRule ^/(.*\.php)    /en/$1 [QSA,L] #any php file with no language subdirectory redirects to the default language 

첫 번째 Redirect 301이 홈페이지로 이동하지 않는 이유는 무엇입니까? 교환 할 때 ..Apache - 다시 쓰기 규칙 혼동

RewriteRule ^/resort.php(.*) http://www.sitename.com/index.php [R=301,L] 

작동이 시작됩니다. 나는 규칙이 많아서 하나가되고 다른 하나는 점프하기 때문에 나는 확신한다. 그러나 나는 다소 잃어 버렸고 아마도 전문가는 이것을 더 분명하게 설명 할 수 있었다.

내 디렉토리 구조는 그래서 같다 : 루트에는 /index.php 없다

/en/index.php 
/direct/ 

, 나는 처음 엔로 리디렉션하고 있습니다.

답변

3

Redirect 지시문은 mod_rewrite로 bun-fight에 들어갑니다. 후자는 상당히 공격적이며 Redirect 지시문을 사용하여 응답에 설정된 리다이렉트 HTTP 헤더를 덮어 쓰고 있습니다.

이미 해결책을 찾았습니다. RewriteRule을 사용하여 리디렉션을 수행하십시오. [L] 플래그는 "마지막 규칙 - 더 이상 처리하지 않음"을 의미합니다. 이는 규칙이 서로 간섭하지 않도록 방지하는 방법입니다. 일반 Redirect 지시어는 RewriteRule이라는 간단한 기능을 쉽게 구현할 수 있습니다.

+0

아, 나는 그것이 일종의 충돌이라는 것을 알고있었습니다. –

0
RewriteRule /resort.php/FOO/BAR http://www.sitename.com.com/index.php [R=P, L] 

사실, L 플래그는 LAST 규칙을 의미하므로 트리거되면 파일이 읽히지 않습니다.