%{REQUEST_FILENAME}.ext은(는) 무슨 뜻인가요? 추가로 .ext 끝나는 이유는 무엇입니까?

%{REQUEST_FILENAME}.ext은(는) 무슨 뜻인가요? 추가로 .ext 끝나는 이유는 무엇입니까?

에는 %{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요청 했다면상태실패하고 다시 쓰기가 발생하지 않습니다(올바른).

그러나 이 규칙은 엄밀히 말하면 정확하지 않으며 특정 조건에서 다시 쓰기 루프가 발생할 수 있습니다. 다음 관련 질문을 참조하세요.

관련 정보