2010-01-26 2 views
6
rewriteengine on 
rewriterule ^/a/b$ ^/c$ 

(왜? RewriteBase 필요합니까)하지만.htaccess를 통해 내 RewriteRule의 문제점은 무엇입니까? 작동하지

rewriteengine on 
rewritebase/
rewriterule ^a/b$ ^c$ 

작품.

+1

@ unknown - 이것은 좋은 질문입니다. 여기에 물린 사람이 없으면 serverfault.com으로 옮길 수도 있습니다. 나는 또한 당신이 당신의 질문에 더 많은 답변을 수락하고 도중에도 몇 가지 질문에 대답하도록 권장합니다 ... –

답변

1

사용중인 Apache 버전은 무엇입니까? RewriteBase은 루트에서 다시 작성할 때 필요하지 않습니다. 그렇지 않다면 필요할 수도 있습니다. 예를 들어, 내 블로그 중 하나에 대한 나의 현재 구성의 일부 (아파치 2.2)는 다음과 같이보고, 작동합니다

RewriteEngine On  
RewriteRule ^/$ /blog/ [R] 
RewriteRule ^/wordpress/(.*) /blog/$1 [R] 
11

그것은 아마 최고의 슬래시 너무 많은 규칙 작품을 만드는 RewriteBase 아니다. 또한 RewriteRule의 두 번째 인수는 정규 표현식이 아닙니다. 대신, 시도 :

RewriteRule ^/?a/b$ c 

의 .htaccess에서 RewriteRule의 적용, 선도적 인 슬래시는 당신이 그것을 포함하는 경우 패턴이 실패하게됩니다 URL에서 제거됩니다. "^ /?"를 사용하여 패턴을 시작하면 기본 구성 파일과 디렉토리 별 구성 파일에서 작동합니다.

다시 쓰기 엔진이 작동하는 방식과 RewriteBase의 중요성에 대한 자세한 내용은 을 참조하십시오.

편집 : mod_rewrite technical details에 언급 RewriteRuleRewriteBase의 설명서에 설명 된 바와 같이, 상기 URL은 디렉토리 별 재 작성 규칙은 평가 시간에 의해 경로로 번역 한 내용입니다. 다시 쓰기 엔진에는 더 이상 사용할 URL이 없습니다. 대신 슬래시로 끝나는 로컬 디렉토리 접두사 (.htaccess 파일이있는 디렉토리)를 제거합니다. 예를 들어 방문자가 "/var/www/foo/bar/baz.html"을 요청하고 "/var/www/foo/.htaccess"에 다시 쓰기 규칙이 설정되어 있다고 가정합니다. 각 규칙 앞에서, 다시 쓰기 엔진은 "/ var/www/foo /"를 제거하고 "bar/baz.html"을 다시 쓰기 규칙과 비교합니다. 규칙을 처리 한 후 로컬 디렉토리 접두사가 미리 추가됩니다 ("http : //"로 시작하는 대체가 아닌 경우). 모든 다시 쓰기 규칙이 처리 된 후 다시 작성 기준이 설정된 경우 로컬 디렉터리 접두사가 바뀝니다. 그렇지 않으면 문서 루트가 제거됩니다. 다시 작성된 URL은 하위 요청으로 다시 주입됩니다.

+0

'.htaccess'에서 적용 할 때 선행 슬래시가 제거 된 이유를 자세히 설명해 주시겠습니까? – user198729

관련 문제