2012-11-15 51 views
0

我在我的網站上重新命名了一個目錄。如何將所有現有的網址重定向到新的網址。如何編寫.htaccess規則在目錄名稱更改後將所有URL重定向到新URL?

例如,我將「MyFolder」重命名爲「mydirectory」。那麼,如何使用.htaccess文件中的一些規則將http://mywebsite.com/MyFolder/somepage.html重定向到http://mywebsite.com/mydirectory/somepage.htmlhttp://mywebsite.com/MyFolder/anotherpage.htmlhttp://mywebsite.com/mydirectory/anotherpage.html等。

以下是我的.htaccess文件的內容。這是一些WordPress的其他規則。

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

RewriteRule ^/Wordpress/(.*)$ http://example.com/wordpress/$1 [R=301,L] 

</IfModule> 

# END WordPress 

所以RewriteRule ^/Wordpress/(.*)$ http://example.com/wordpress/$1 [R=301,L]應根據我的知識工作。但它不起作用。

有趣的是,下面的規則解決了我的問題。但我想學習如何。

Redirect 301 /Wordpress/ http://example.com/wordpress/ 

請讓我知道這是如何工作的。

+0

首先你需要把你的規則放在單詞按下規則'重寫規則。 /index.php [L]',其次,你需要刪除規則中的第一個斜槓:'RewriteRule^Wordpress /(.*)$ http://example.com/wordpress/$1 [R = 301,L] '(如果你重定向到同一個域,你不需要'http:// example.com'部分) – Oussama

回答

0

你有幾個問題。

當匹配的.htaccess的網址是要記住,你在你的重寫規則的匹配值是相對路徑,而不是一個完整的URI是很重要的(即它不包含根斜線)。你既可以將其刪除,或使其可選,使VirtualHosts之間的代碼轉讓及的.htaccess

RewriteRule ^/?Wordpress/(.*)$ http://example.com/wordpress/$1 [R=301,L] 

你的第二個問題是,你必須匹配所有URL和具有L標誌的新規則之前重寫規則。 L標誌使它成爲處理的最後一條規則,因此您的新RewriteRule永遠不會被觸發,將其移動到RewriteBase之後。

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/

RewriteRule ^/Wordpress/(.*)$ http://example.com/wordpress/$1 [R=301,L] 

RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

</IfModule> 

# END WordPress 

最後什麼我也不太明白(但很可能是由於您創建一個虛擬的例子)是,如果你移動了WordPress的目錄中,你將有有你的WordPress的.htaccess中的重定向沒有看文件,因爲如果文件被移動,那麼對舊路徑的請求不會命中該文件。