2012-08-30 64 views
0

我改變了我的網站的根目錄 - 是否有可能創建htaccess將所有內容重定向到新的根目錄(如所有的錨點,頭文件等)?htaccess重定向

我試過的東西,如:

RewriteEngine on 
RewriteCond %{REQUEST_URI} ^/$ 
RewriteRule (.*) http://localhost/root/index.php [R=301,L] 

但是當我打開本地主機/,否則如果我點擊一個錨它不重定向任何地方,只重定向到新的文件夾。

這是具體我想要什麼來實現的:
錨是:本地主機/用戶
我想它重定向到:本地主機/ /用戶

回答

0

我想你刪除協議和域。 (。*)嘗試

重寫規則/root/index.php [R = 301,L]

或者,也許

重寫規則的http(*):/root/index.php [R = 301 ,L]

+0

它仍然不會重定向諸如圖像之類的東西,但我想我不能在不更改每個標記中的src路徑的情況下做到這一點,對吧? – user1615069

0

它仍然不會重定向的東西,如圖像,但我想我不能這樣做,而不改變每個標籤的src路徑,對不對?

使用capturing groups

RewriteRule (.*) /root/$1 [R=301,L] 

你看,在$1存在的括號模式拍攝的東西的參考。因此,任何和所有的URI都被重定向到它們在根文件夾中的等同物。這也適用於子文件夾,一切(「img/something.jpg」 - >「root/img/something.jpg」)。

但是,僅此規則將導致無限循環,因爲重定向的URL現在將被重寫。例如:請求來自/index.html,重定向到/root/index.html,但隨後再次被捕獲,並重定向到/root/root/index.html ...所以要處理這個問題,我們應該引入一個RewriteCond ,如

RewriteCond %{REQUEST_URI} !^/root/ 

這將意味着:「如果請求的URI不以'/ root /'開頭」。這些應該讓你開始。


的替代,或許更經濟的方式來做這個重是通過使用RedirectMatch directive,但正則表達式是一個有點亂,因爲它需要包括重寫的URL不應與「根啓動條件'(以避免重定向循環)。我現在不能測試,但沿線的東西

RedirectMatch ^/(?!root/)(.*) /root/$2 

可能會做的伎倆。 ((?!root)位是negative lookahead,當然這樣的模式也可以在rewriteRule中使用)。