2017-12-17 9 views
0

나는이 간단한 문제로 몇 시간을 보냈으며 여기서 잘못하고있는 것을 파악할 수 없습니다.예기치 않게 RewriteRule이 반환됩니다. 301

이 예상대로 작동합니다

RewriteEngine on 
RewriteRule ^([A-Za-z0-9-_.]+)/([A-Za-z0-9-_.]+/)$ index.php?eins=$1&%{QUERY_STRING}&zwei=$2&%{QUERY_STRING} [L] 

및 요청 다시 작성합니다 https://domain.tld/asdf/asdf/내부적으로 예상대로 지금까지 너무 좋아 모든 https://domain.tld/index.php?eins=asdf&zwei=asdf에 있습니다.

하지만이 추가로 2 규칙을 추가하는 경우

RewriteEngine on 
RewriteRule ^([A-Za-z0-9-_.]+)/([A-Za-z0-9-_.]+/)$ index.php?eins=$1&%{QUERY_STRING}&zwei=$2&%{QUERY_STRING} [L] 
RewriteRule ^(.+[^/])$ /$1/ [R=301,L] 

아파치, 301 https://domain.tld/asdf/asdf/ 내가 첫 번째 RewriteRule의이 L = 마지막 하나 여야합니다 예상 https://domain.tld/index.php/?eins=asdf&&zwei=asdghi/

로 리디렉션 같은 요청에 응답하지만, 왜 리디렉션을합니까? 실제로 후행 슬래시가 없으면 30130 리디렉션 을 얻고 싶습니다.

답변

0

확인 RewriteRule FlagsL|last,

당신이 .htaccess 파일 중 하나 또는 섹션한다 RewriteRule을 사용하는 경우이 규칙이 처리되는 방법을 일부 이해하는 것이 중요합니다. 이것의 단순화 된 형태는 일단 규칙이 처리되면 재 작성된 요청을 URL 구문 분석 엔진 인 으로 돌려 보내서 처리 할 수 ​​있습니다. 재 작성된 요청으로 이 처리 될 수 있습니다. .htaccess 파일 또는 섹션이 다시 발생할 수 있으므로 룰셋을 다시 시작하여 에서 다시 실행할 수 있습니다. 일반적으로 규칙 중 하나가 내부 또는 외부 리디렉션으로 인해 요청 프로세스가 다시 시작되는 경우이 문제가 발생합니다. 당신은 단지 전용 디렉토리에 대한 후행 슬래시를 추가하려면

, 이러한 규칙을 시도 할 수 :

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

내가 정확히 코드가 아니라, 어떤 슬래시를 추가 아니에요 추가하는 경우. 문서와 관련된 첫 번째 줄은 디렉토리가 존재하는지 확인하기 때문입니다. 나는 그게 사실이 아니다. 그러나 첫 번째 줄이 없어도 슬래시는 추가되지 않지만 디스크의 절대 경로로 리디렉션됩니다. – CptLeChuck70

+0

'RewriteBase /'를 추가해야합니다. – Ben