2009-08-30 4 views
1

블로그가 www.foo.com/wp/에 설치되어 있고/wp /로 시작하지 않는 페이지로 이동하는 모든 요청을 www.foo.com/wp/로 리디렉션하고 싶습니다 (보존하지 않음). URL의).mod_rewrite 규칙, '문자열이 아님'을 테스트하는 방법은 무엇입니까?

예 :은 :

www.foo.com/bar/baz/hello.gif  > www.foo.com/wp/ 

또한, 같은 시간에, 나는 WWW이 URL을해야합니다.

RewriteCond %{HTTP_HOST}  !^www.foo.com [NC] 
RewriteCond %{HTTP_HOST}  !^$ 
RewriteRule ^/(.*)   http://www.foo.com/$1 [R=permanent] 

RewriteRule ^(?!wp)/(.*)$    http://%{HTTP_HOST}/wp/($2) [R=permanent] 

을하지만이 현재 완전히 깨진 생각 : 그렇지 않은 경우에 추가 한 순간에

(내 규칙이 혼란스러워지고 곳이 될 수 있음), I는있다.

도움 주시면 감사하겠습니다.

답변

1
RewriteCond %{HTTP_HOST}  !^www.foo.com [NC] 
RewriteCond %{HTTP_HOST}  !^$ 
RewriteRule (.*)    http://www.foo.com/$1 [R=permanent,L] 

RewriteRule ^(?!wp/)(.*)  http://%{HTTP_HOST}/wp/$1 [R=permanent] 
  1. URL의 경로 부분은 결코 일치하지 선도적 인 슬래시를 가지고 있으며, 당신은 .*을 고정하지 않아도된다.
  2. L 수정하면 첫 번째 리디렉션에 도착한 후 다시 쓰기가 진행되지 않습니다.
  3. 네거티브 lookbehind (?!)은 캡처 구문이 아니므로 $1이 아닌 ($1)으로 작성하여 캡처 된 패턴으로 대체하십시오.

편집 : 분명히 OP의 마지막 규칙은 더 나에게 의미하지만, 무엇을하지 않습니다 /wp/,로 시작하는 경우를 제외 실패, 작동하지 않습니다. 여기에 해결의 시도는 다음과 같습니다

RewriteCond %{HTTP_HOST}  !^www.foo.com [NC] 
RewriteCond %{HTTP_HOST}  !^$ 
RewriteRule (.*)    http://www.foo.com/$1 [R=permanent,L] 

RewriteCond %{REQUEST_URI} !^/wp/ 
RewriteRule (.*)    http://%{HTTP_HOST}/wp/$1 [R=permanent] 
+0

/wp/부분의 경우 URL에/wp를 끝없이 추가하여 리디렉션 루프를 만듭니다. – mozboz

+0

감사합니다 혼돈. 이로 인해 나는 내가 한 행동을 끝내게되었다. RewriteCond % {REQUEST_URI}! ^/wp RewriteRule (. *) http : // % {HTTP_HOST}/wp $ 1 [R = 영구] – mozboz

0

는이 규칙을 시도해보십시오

RewriteCond %{HTTP_HOST} !^www.exmaple.com [NC] 
RewriteCond %{HTTP_HOST} !^$ 
RewriteRule^http://www.example.com%{REQUEST_URI} [R=301,L] 

RewriteCond %{THE_REQUEST} ^GET\ /wp/ 
RewriteRule ^wp/(.*) /$1 [R=301,L] 

RewriteRule !^wp/ wp%{REQUEST_URI} [L] 

첫 번째 규칙은 호스트 이름입니다. 두 번째는 외부에서 /wp 경로 접두어를 제거하는 것입니다. 세 번째는 내부 리다이렉션을 위해 접두어를 다시 추가하는 것입니다.

관련 문제