mod_rewrite
깨끗한 URL과 사용자 정의 404 페이지를 얻는 데 사용하는 웹 사이트가 있습니다 . 내 .htaccess
파일은 다음과 같습니다.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?clean_url=$1 [QSA,L]
</IfModule>
제가 당황스러운 점은 URL에 %2F
(url-encoded /
)가 포함되어 있으면 서버가 404를 강제로 표시하는 것처럼 보인다는 것입니다. 예를 들어 http://example.com/category/article
일반 기사이기는 하지만 http://example.com/category%2farticle
서버에서 생성된 404 페이지를 제공합니다. (사용자 정의 404 페이지가 아님)
이런 일은 예상하지 못했습니다. 왜 이런 일이 발생합니까? 그 주위에 방법이 있나요?
답변1
URL http://example.com/category/article
과 http://example.com/category%2farticle
가 동일하지 않습니다. 에 따르면RFC 2616 §3.2.3, 예약된 문자는 특별한 의미를 갖습니다(결국 URL 이스케이프의 핵심은 이것이었습니다). RFC 2396 §2.2/
예약된 문자로 나열됩니다 . HTTP URL의 컨텍스트에서 /
경로 요소를 구분하는 반면 은 %2f
문자 그대로 슬래시입니다.
아파치에서는AllowEncodedSlashes On
404와 함께 요청이 즉시 거부되는 것을 방지할 수 있습니다.