많은 포스터는 .htaccess
파일 내에서 RewriteRule 및 RewriteCond 문을 디버깅하는 데 문제가 있습니다. 이들 중 대부분은 공유 호스팅 서비스를 사용하고 있으므로 루트 서버 구성에 액세스 할 수 없습니다. 많은 응답자들이 제안한대로 .htaccess
파일 재 작성을 피할 수 없으며 RewriteLogLevel "을 활성화 할 수 없습니다 . 또한 많은 .htaccess
특정 함정과 제약 조건이 잘 설명되어 있지 않습니다. 로컬 테스트 LAMP 스택 설정에는 대부분의 학습 곡선이 너무 많습니다. .
그래서 내 Q는 규칙을 스스로 디버깅 하는 방법을 권장합니다 . 아래에 몇 가지 제안을 제공합니다. 다른 제안을 부탁드립니다.
mod_rewrite 엔진이
.htaccess
파일을 순환한다는 것을 이해 하십시오 . 엔진은 다음 루프를 실행합니다.do execute server and vhost rewrites (in the Apache Virtual Host Config) find the lowest "Per Dir" .htaccess file on the file path with rewrites enabled if found(.htaccess) execute .htaccess rewrites (in the user's directory) while rewrite occurred
따라서 규칙이 반복적으로 실행되며 URI 경로를 변경하면 다른
.htaccess
파일이 있으면 실행될 수 있습니다. 따라서 필요한 경우RewriteCond
규칙 실행을 중지하기 위해 추가를 추가하여이 루프를 종료하십시오 ..htaccess
다중 레벨 규칙 세트를 명시 적으로 사용하지 않는 한 하위 레벨 재 작성 규칙 세트를 삭제하십시오 .테스트 패턴 세트에 대해 테스트하여 각 Regexp의 구문이 올바른지 확인하고 이것이 유효한 구문인지 확인하고 전체 범위의 테스트 URI로 의도 한 작업을 수행하는지 확인하십시오. 자세한 내용은 아래 답변 을 참조하십시오.
테스트 디렉토리에서 규칙을 점진적으로 빌드하십시오. "
.htaccess
경로 에서 가장 깊은 파일 실행 "을 사용하여 기본 규칙을 망치거나 사이트 작동을 중지하지 않고 여기에서 별도의 테스트 디렉토리 (트리) 및 디버그 규칙 세트를 설정할 수 있습니다. 개별 규칙에 실패를 현지화하는 유일한 방법이므로 한 번에 하나씩 추가해야합니다.더미 스크립트 스텁을 사용하여 서버 및 환경 변수를 덤프하십시오 . (참조 Listing 2는 앱 사용이 말할 경우),
blog/index.php
당신은이 점을 복사 할 수test/blog/index.php
와 귀하의 블로그 규칙을 테스트하는 데 사용할test
하위 디렉토리. 또한 환경 변수를 사용하여 대체 문자열을 올바르게 해석하는 데 다시 쓰기 엔진이 있는지 확인할 수 있습니다 (예 :RewriteRule ^(.*) - [E=TEST0:%{DOCUMENT_ROOT}/blog/html_cache/$1.html]
phpinfo 덤프에서 REDIRECT_ * 변수를 찾으십시오 . BTW, 나는 이것을 사용했고 내 사이트에서
%{ENV:DOCUMENT_ROOT_REAL}
대신 사용해야한다는 것을 발견했습니다 . 리디렉터 루핑의 경우 REDIRECT_REDIRECT_ * 변수는 이전 패스를 나열합니다. 기타..브라우저가 잘못된 301 리디렉션을 캐싱하여 물리지 않도록하십시오 . 아래 답변을 참조하십시오 . 덕분에Ulrich Palha 에게 .
다시 쓰기 엔진은 내부 하위 요청 (1) 과 버그가 있고 종종 PATH_INFO 처리가 잘못되어
.htaccess
컨텍스트 내에서 계단식 규칙에 민감하게 보입니다 (즉,RewriteRule
결과는 대체로 이어지고 추가 규칙에는 영향을 미칩니다 ) [NS], [L] 및 [PT] 플래그를 사용하여 방지하십시오.
더 이상의 의견이나 제안?
Listing 1-phpinfo
<?php phpinfo(INFO_ENVIRONMENT|INFO_VARIABLES);