htaccess 실행 순서 및 우선 순위


19

아파치가 동일한 경로의 다른 레벨에있는 .htaccess 파일을 어떤 순서로 실행하고 그 안에 다시 쓰기 규칙이 우선 순위를 매기는 방법을 누구에게나 설명 할 수 있습니까?

예를 들어, 아래의 첫 번째 .htaccess에서 다시 쓰기 규칙이 작동하지 않는 이유는 /blog무엇입니까?

.htaccess /

RewriteEngine on
RewriteBase /
RewriteRule ^blog offline.html [L]

.htaccess /blog

RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]

추신 : 나는 단순히 대답을 찾지 않고 아파치 / mod_rewrite 내부를 이해하는 방법을 찾고 있습니다 ... 이 문제를 해결 하는 방법 보다 나에게 더 중요한 이유무엇입니까?

답변:


20

Apache Tutorial : .htaccess를 읽고 , 주로 "지시문이 적용되는 방법"섹션을 읽어야한다고 가정합니다 .

.htaccess 파일에있는 구성 지시문은 .htaccess 파일이있는 디렉토리 및 모든 서브 디렉토리에 적용됩니다. 그러나 높은 디렉터리에는 .htaccess 파일이있을 수 있다는 점도 기억해야합니다. 지시문은 찾은 순서대로 적용됩니다. 따라서 특정 디렉토리의 .htaccess 파일은 디렉토리 트리에서 더 높은 .htaccess 파일에있는 지시문을 무시할 수 있습니다. 그리고 그 명령은 재정의 된 지시문이 아직 높거나 주 서버 구성 파일 자체에서 발견되었을 수 있습니다.

전체 읽기를 제공하면 .htaccess는 더 이상 미스터리가 아닙니다.


7
mod_rewrite는 특별한 경우입니다. 다시 쓰기 규칙이 상향식으로 적용됩니다. 먼저 서브 디렉토리의 규칙과 상위 디렉토리의 규칙.
GetFree

위에 나열된 문서는 Apache 2.2 용입니다. 현재 아파치 버전의 경우이 링크로 이동하십시오. httpd.apache.org/docs/current/howto/htaccess.html
SherylHohman

3

RewriteOptions inherit부모 디렉토리의 다시 쓰기 규칙을 상속하는 데 사용할 수 있습니다 . 그러나 상위 디렉토리의 재 작성 규칙은 RewriteOptions의 문서에 따라 나중에 적용됩니다 .


1
부모 디렉토리에 대한 Rewrite 지시문은 이 문이 없어도 적용 되지만 (혼란 스럽지만) 부모에서 자식으로 지시문의 가상 복사 + 붙여 넣기 (다시 쓰기 기반이 다를 수 있음)를 수행하는 데 사용할 수 있다고 생각합니다. mod_rewrite가 때때로 머리를 어지럽히는 것은 당연합니다 ... Argh.
Simon East

2
@SimonEast "이 명령문 없이도 상위 디렉토리의 재 작성 지시문이 적용됩니다"-확실합니까? 당신은 참조가 있습니까? 특히 mod_rewrite지시문은 기본적으로 상속 되지 않습니다 (다른 모듈과 다름). 지시문을 상속하려면 어딘가에RewriteOptions InheritXXXX 지시문 이 필요합니다 . 그러나 이는 상위 디렉토리에 지정할 수있는 옵션 과 하위 디렉토리를 제어하는 ​​서버 구성 으로 Apache 2.4 이상에서 더 복잡해집니다 . InheritDown
MrWhite
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.