모드 재작성 및 URL 인코딩 문자로 URL을 정리하면 404가 발생합니까?

모드 재작성 및 URL 인코딩 문자로 URL을 정리하면 404가 발생합니까?

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/articlehttp://example.com/category%2farticle가 동일하지 않습니다. 에 따르면RFC 2616 §3.2.3, 예약된 문자는 특별한 의미를 갖습니다(결국 URL 이스케이프의 핵심은 이것이었습니다). RFC 2396 §2.2/예약된 문자로 나열됩니다 . HTTP URL의 컨텍스트에서 /경로 요소를 구분하는 반면 은 %2f문자 그대로 슬래시입니다.

아파치에서는AllowEncodedSlashes On404와 함께 요청이 즉시 거부되는 것을 방지할 수 있습니다.

관련 정보