mod_rewrite: 웹페이지에 리디렉션 루프가 있습니다.

mod_rewrite: 웹페이지에 리디렉션 루프가 있습니다.

다음과 같이 호스트 이름 바로 뒤에 오는 매개변수를 가지려고 합니다.

www.domain.com/parameter

이러한 이유로 작동하려는 두 매개변수 값에 대해 다음 rewriteRule을 설정했습니다.

RewriteRule ^(en|pt)$ /index.php?language=$1&%{QUERY_STRING} [L]

잘 작동해요! 하지만 나열된 매개변수 없이 요청을 리디렉션하려면 새 규칙을 만들어야 합니다.

그런 이유로 나는 이것이 효과가 있을 것이라고 생각했습니다.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^(en|pt)$
RewriteRule ^(.*)$ /pt/$1/ [L,R=301]

그러나 불행하게도 리디렉션 루프가 표시됩니다.

나는 다음과 같은 결과를 얻었습니다:

http://hostname/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt/pt//

이 문제를 해결하는 방법에 대한 조언을 주시면 감사하겠습니다!

답변1

그것은 ~ 때문에디렉토리아니다일반 파일.

http://httpd.apache.org/docs/current/mod/mod_rewrite.htmlid( 스니펫에는 HTML DOM이 없습니다 . 가장 가까운 것은 관련이 없으며 LA-U, 있어야 할 항목도 id="LA-F"누락되었습니다!)

다양한 파일 속성 테스트를 수행할 수 있습니다.

'-d' (is directory)
Treats the TestString as a pathname and tests whether or not it exists, and is a directory.
'-f' (is regular file)
Treats the TestString as a pathname and tests whether or not it exists, and is a regular file.

구성의 나머지 부분이 올바른 경우(뒤에 슬래시를 추가하는 것이 좋은 생각인지 잘 모르겠습니다) 다음에 대한 추가 조건을 추가해야 합니다 !-d.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^(en|pt)$
RewriteRule ^(.*)$ /pt/$1/ [L,R=301]

또한 nginx로 전환하는 것도 고려해 보세요! 일반적인 사용에 더 적합한 명확한 구문을 갖고 있을 뿐만 아니라 관련 문서에 대한 직접 링크도 제공합니다.http://nginx.org/r/if.

"-e" 및 "!-e" 연산자를 사용하여 파일, 디렉터리 또는 기호 링크 존재 여부를 확인합니다.

답변2

%{REQUEST_URI}호스트 이름 바로 뒤에 오는 URI 경로이므로 슬래시로 시작합니다./

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/(en|pt)$
RewriteRule ^.*$ /pt/$0/ [R=301,L]

관련 정보