%20%EB%AC%B4%EC%8A%A8%20%EB%9C%BB%EC%9D%B8%EA%B0%80%EC%9A%94%3F%20%EC%B6%94%EA%B0%80%EB%A1%9C%20.ext%20%EB%81%9D%EB%82%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
에는 %{REQUEST_FILENAME}
다음과 같은 문자열이 포함되어 있습니다.
/web/webroot/index.php
많은 사람들이 파일이 존재하고 다음과 같은 .php 확장자를 가지고 있는지 테스트할 것을 권장합니다.
RewriteCond %{REQUEST_FILENAME}.php -f
.php
이후 는 중복되지 않습니까 %{REQUEST_FILENAME}
? 변수에는 이미 이 포함되어 있어야 합니다 .php
. 그렇죠?
.php
뒤에 추가하면 %{REQUEST_FILENAME}
TestString 검사에서 다음과 같이 추가 .php를 추가하는 것처럼 보입니다 .
/web/webroot/index.php.php
나는 간단한 것을 놓치고 있습니다. 확신하지만 그것이 무엇인지 모르겠습니다.
맥락은 이렇습니다:
RewriteCond %{THE_REQUEST} ^.*?\.php [NC]
RewriteRule ^ - [R=404,NE,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_FILENAME}.php [L]
답변1
.php
이후 는 중복되지 않습니까%{REQUEST_FILENAME}
? 변수에는 이미 이 포함되어 있어야 합니다.php
. 그렇죠?
글쎄, 예, 아니오, 그것은 당신이 무엇을 하려는지에 달려 있습니다.
RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^ %{REQUEST_FILENAME}.php [L]
이 규칙을 사용하면 확장자가 없는 URL을 요청할 수 있습니다. 예. /index
또는 내부적으로 및 각각 /foo
에 대한 요청을 다시 작성합니다 ./index.php
/foo.php
이 경우 는 REQUEST_FILENAME
형식의 문자열입니다 /web/webroot/index
. 따라서 /web/webroot/index.php
동일한 내용을 다시 작성하기 전에 존재하는 테스트입니다. /index.php
요청 했다면상태실패하고 다시 쓰기가 발생하지 않습니다(올바른).
그러나 이 규칙은 엄밀히 말하면 정확하지 않으며 특정 조건에서 다시 쓰기 루프가 발생할 수 있습니다. 다음 관련 질문을 참조하세요.