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


115

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

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

답변:


144

당신에 일부 정크 값을 입력 .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 파일에 rewriterule을 추가하려고하는데 어떤 이유로 그것을 사용하지 않는다는 것입니다.
macha

@macha 위의 방법을 시도하십시오. 내부 서버 오류가 발생하면 mod_rewrite (.htaccess)가 활성화되었음을 의미합니다. 공유 호스트에 있습니까?
ThinkingMonkey

아니요, 내 localhost에서 작업하고 있습니다. .htaccess 파일이 언제로드되는지 알고 있습니까? 나는 아파치가 이것을 먼저 읽을 것이지만
macha

@macha .htaccess 파일이로드되지 않습니다. 해당 폴더에있는 페이지에 액세스하려고 할 때 아파치에 의해 액세스됩니다 (있는 경우).
ThinkingMonkey

제 질문은 누군가 웹 페이지를 요청하면 아파치가 서버 측 스크립트로 직접 이동하거나 해당 폴더에서 .htaccess 파일을 찾은 다음 계속 진행합니까 ??
macha

52

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

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

deny from all

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


4
확인하는 동안 몇 초 동안 아무것도 작동하지 않아도 괜찮다면 가장 간단한 테스트입니다.
Mordred

1
네-작업중인 사이트가 .htaccess 파일을 사용하지 않는지 확인하는 데 약 1 초가 걸렸습니다.
bonh

1
감사합니다, 매력처럼 작동합니다 :) 디버깅 시간을 절약했습니다!
Martijn van Hoof

32

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

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

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

AllowOverride All

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


감사. 나는 디렉토리 트리의 / var / www가의 주요 apache2.conf의 파일의 관련 섹션 발견
팀 리처드슨

6

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

DirectoryIndex test.html

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


4

세 가지 질문 중 첫 번째 질문에 대답하려면 .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 디버깅!


3

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로가 제대로 작동하는지 공고히 할 것이다.


1

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

http://htaccess.mwl.be/


-1

.htaccess 파일에 정크를 넣고 아파치를 다시로드 해보십시오. 아파치가 시작되지 않으면 작동을 알고 있습니다. htaccess를 올바르게 구성한 것을 축하하는 경우 정크를 제거한 다음 아파치를 다시로드하십시오.


7
페이지 요청이있을 때까지 .htaccess를 확인하지 않는다는 점을 감안하면 아파치가 잘못된 .htaccess가 있으면 시작하거나 실행하지 못할 것이라고 생각합니다.
Andrew
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.