".htaccess의 ErrorDocument 404가 RewriteRule과 호환되지 않아 기능 오류가 발생합니다."
P粉320361201
P粉320361201 2024-01-10 16:56:14
0
1
258

.htaccess ErrorDocument 404 다시 쓰기 규칙을 사용할 때 리디렉션이 없습니다. 500 내부 서버 오류가 발생합니다.

아니요 RewriteRule 时,ErrorDocument 제대로 작동합니다.

내 코드

RewriteEngine On 
   <IfModule mod_rewrite.c>
   RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ /stores/  [NC,L]
   ErrorDocument 404 /404.html
  </IfModule>

P粉320361201
P粉320361201

모든 응답(1)
P粉605233764

이 규칙의 "문제"는 존재하지 않는 파일을 요청하고 해당 파일이 /subdirectory/ 하위 디렉터리에 없으면 무한 재작성 루프가 발생한다는 것입니다(따라서 500 내부 서버는 오류 참조) 다음 재작성을 시도하기 때문입니다.

  • /존재하지 않음(초기 요청)
  • /stores/not-exists (첫 번째 재작성)
  • /stores/stores/not-exists (두 번째 재작성)
  • /stores/stores/stores/not-exists (세 번째 재작성)
  • 잠깐.

실제로 달성하려는 목표를 지정하지 않았지만 /stores가 "숨겨진" 하위 디렉터리이고 /stores 하위 디렉터리의 실제 파일에 다시 쓰려고 했다고 가정합니다. 이것이 그러한 규칙이 Apache에 정의된 ErrorDocument 404 지시문과 함께 작동하는 유일한 방법입니다.

따라서 /stores 하위 디렉터리에 다시 쓸 때 다시 쓰기를 실행하기 전에 요청이 실제 파일에 매핑되는지 먼저 확인해야 합니다. 이렇게 하면 존재하지 않고 /stores 하위 디렉터리에 매핑되지 않은 파일에 대한 모든 요청이 Apache 정의 404 ErrorDocument로 전달됩니다.

예를 들어 다음 코드를 사용해 보세요.

으아악

<IfModule>컨테이너가 필요하지 않습니다(하지만 RewriteEngine 지시어를 이 컨테이너 외부에 두는 것은 말이 되지 않습니다).

.htaccess 파일이 문서 루트에 있으면 RewriteBase 지시문이 필요하지 않습니다.

구조적으로 ErrorDocument를 먼저 정의하는 것이 가장 좋습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!