[apache] .htaccess RewriteRule이 작동하지 않는 디버깅 방법

나는이 RewriteRuleA의 .htaccess아무것도하지 않는 파일입니다. 이 문제를 어떻게 해결합니까?

  • .htaccess파일이 Apache에서 읽고 준수되고 있는지 어떻게 확인할 수 있습니까? 에코 “작동 중”메시지를 작성할 수 있습니까? 작성하면 해당 라인이 어디에 에코됩니까?
  • .htaccess파일이 사용되지 않는 경우 Apache에서 사용하도록하려면 어떻게해야합니까?
  • (가) 경우 .htaccess사용되는하지만 내가 RewriteRule여전히 영향을하지 않습니다, 나는 디버그에 더 무엇을 할 수 있습니까?


답변

당신에 일부 정크 값을 입력 .htaccess
예를 들어 foo bar, sakjnaskljdnas
어떤 키워드가 없습니다 htaccess로 인식하고 URL을 방문하십시오. 작동하는 경우

500 내부 서버 오류

인터넷 서버 오류

서버에 내부 오류 또는 잘못된 구성이 발생하여 요청을 완료 할 수 없습니다 ….

나는 당신이 곧 그것을 넣는 것이 좋습니다 RewriteEngine on.


당신은 당신의 기계에 있기 때문에. 아파치 .conf파일에 대한 액세스 권한이 있다고 가정 합니다.

.conf파일을 열고 다음 과 유사한 줄을 찾습니다.

LoadModule rewrite_module modules/mod_rewrite.so

주석 처리 된 경우 (#), 주석 처리를 제거하고 아파치를 다시 시작하십시오.


재 작성을 기록하려면

RewriteEngine On
RewriteLog "/path/to/rewrite.log"
RewriteLogLevel 9

위의 3 줄을 virtualhost. httpd를 다시 시작하십시오.

RewriteLogLevel 9Level에 높은 값을 사용하면 Apache 서버가 크게 느려집니다! 디버깅을 위해서만 2 이상의 레벨에서 재 작성 로그 파일을 사용하십시오! 레벨 9는 거의 모든 재 작성 로그 세부 사항을 기록합니다.


최신 정보

Apache 2.4에서 변경된 사항 :

FROM 2.2에서 2.4로 업그레이드

RewriteLogRewriteLogLevel 지침은 제거되었습니다. 이 기능은 이제 LogLevel 지시문을 사용하여 mod_rewrite 모듈에 대한 적절한 로깅 수준을 구성하여 제공됩니다 . mod_rewrite 로깅 섹션도 참조하십시오.

LogLevel에 대한 자세한 내용은 LogLevel 지시문을 참조하십시오.

당신은 성취 할 수 있습니다

RewriteLog "/path/to/rewrite.log"

지금 이런 식으로

LogLevel debug rewrite_module:debug


답변

‘정크 값 입력’대답은 나를 위해 트릭을 수행하지 않았으며 입력 된 정크에도 불구하고 내 사이트가 계속로드되었습니다.

대신 .htaccess 파일 맨 위에 다음 줄을 추가했습니다.

deny from all

그러면 .htaccess가 선택되었는지 여부를 빠르게 알 수 있습니다. .htaccess를 사용하는 경우 해당 폴더의 파일이 전혀로드되지 않습니다.


답변

일반적으로 .htaccess의 모든 변경 사항은 가시적 인 효과를 가져야합니다. 효과가 없으면 다음과 같이 구성 아파치 파일을 확인하십시오.

<Directory ..>
    ...
    AllowOverride None
    ...
</Directory>

다음으로 변경해야합니다.

AllowOverride All

그리고 .htaccess 파일에서 지시문을 변경할 수 있습니다.


답변

아마도 더 논리적 인 방법은 파일 (예 : test.html)을 만들고 일부 콘텐츠를 추가 한 다음 색인 페이지로 설정하는 것입니다.

DirectoryIndex test.html

대부분의 경우 .htaccess 규칙은 디렉토리 / 파일 수준에서 작업하는 Apache 구성을 재정의합니다.


답변

세 가지 질문 중 첫 번째 질문에 대답하려면 .htaccess 파일이 작동하는지 확인하는 간단한 방법은 .htaccess 파일 상단에서 사용자 지정 오류를 트리거하는 것입니다.

ErrorDocument 200 "Hello. This is your .htaccess file talking."
RewriteRule ^ - [L,R=200]

htaccess로 파일을 읽을하지 않을 경우 두 번째 질문에, 서버의 아파치 구성했다고 할 수있다 AllowOverride로 설정 None. Apache의 문서에는 .htaccess가 적용되는 것을 방해 할 수있는 다른 경우에 대한 문제 해결 팁 이 있습니다.

마지막으로 세 번째 질문에 답하기 위해 재 작성 규칙에서 참조 하는 특정 변수 를 디버깅해야 하거나 규칙과 독립적으로 평가하려는 표현식 을 사용하는 경우 다음을 수행 할 수 있습니다.

참조 하는 변수 를 출력하여 예상 한 값이 있는지 확인하십시오.

ErrorDocument 200 "Request: %{THE_REQUEST} Referrer: %{HTTP_REFERER} Host: %{HTTP_HOST}"
RewriteRule ^ - [L,R=200]

식을<If> 지시문 에 넣어 독립적으로 테스트하십시오 . 이를 통해 표현식이 올바르게 작성되었는지 또는 예상 할 때 일치하는지 확인할 수 있습니다.

<If "%{REQUEST_URI} =~ /word$/">
    ErrorDocument 200 "Your expression is priceless!"
    RewriteRule ^ - [L,R=200]
</If>

행복한 .htaccess 디버깅!


답변

apache bin 디렉토리에 대한 액세스 권한이 있으면 사용할 수 있습니다.

httpd -M 로드 된 모듈을 먼저 확인합니다.

 info_module (shared)
 isapi_module (shared)
 log_config_module (shared)
 cache_disk_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 proxy_module (shared)
 proxy_ajp_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 status_module (shared)
 version_module (shared)
 php5_module (shared)

간단한 지시 후 같은 Options -Indexes또는 deny from allhtaccess로가 제대로 작동하는지 공고히 할 것이다.


답변

htaccess 재 작성 규칙을 테스트하려면 규칙을 적용 할 URL을 입력하고 더 큰 입력 영역에 htaccess의 내용을 배치 한 다음 “테스트”버튼을 누르십시오.

http://htaccess.mwl.be/