2009-08-30 51 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/ 

此外,在同一時間,我需要的URL有WWW。添加如果它不(這可能是在我的規則越來越糊塗)

目前,我有:

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] 

但我認爲這是目前徹底打破。

非常感謝。

回答

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. 負面後視(?!)不是一個捕捉構造,你可以通過編寫$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/part,這將創建一個重定向循環,爲URL添加無數個/ wp。 – mozboz 2009-08-30 23:34:21

+0

謝謝混沌。 RewriteRule(。*)http://%{HTTP_HOST}/wp $ 1 [R = permanent]這個結果給了我後面的行爲: RewriteCond%{REQUEST_URI}!^/wp RewriteRule – mozboz 2009-08-31 00:23:00

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路徑前綴。第三個是再次添加前綴用於內部重定向。