>  Q&A  >  본문

".htaccess의 ErrorDocument 404가 RewriteRule과 호환되지 않아 기능 오류가 발생합니다."

.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粉320361201P粉320361201306일 전302

모든 응답(1)나는 대답할 것이다

  • P粉605233764

    P粉6052337642024-01-11 09:26:16

    이 규칙의 "문제"는 존재하지 않는 파일을 요청하고 해당 파일이 /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를 먼저 정의하는 것이 가장 좋습니다.

    회신하다
    0
  • 취소회신하다