2014-09-22 81 views
1

我有一個網店,我們切換子目錄。從「/ shop」到根「/」。一些產品和類別名稱也會改變。.htaccess:「重定向永久」與回退到「重寫規則」

我想某些特定的URL重定向到新的。例如: www.domainname.de/shop/product_abcwww.domainname.de/product_abc_v2 爲此,我使用.htaccess文件的Redirect Permanent聲明。

在下一步我想要一個所有其他URL的女巫看起來像這樣的後退: www.domainname.de/shop/XXXXX

所以我寫這篇文章重寫規則:

RewriteCond %{REQUEST_URI} ^/shop/(.*) 
RewriteRule ^(.*)$ http://www.domainname.de/ [r=301,L] 
RewriteRule ^(.*)/$ $1 [R=301,L] 

現在我的問題:我把重寫規則.htaccess文件的底部,以便Redirect Permanent -Code將使用之前重寫規則是用過的。但無論如何,重寫規則總是被採用。有沒有解決這個問題的方法?

非常感謝!

+2

我認爲你是在假設在.htaccess這些指令的順序會影響它們的計算順序錯了。當然,你也可以簡單地通過使用'RewriteRule'來代替這些重定向來解決這個問題。 – CBroe 2014-09-22 09:00:13

+0

你能顯示你完整的.htaccess嗎? – anubhava 2014-09-22 09:09:54

+0

@CBroe thank's。 @Jon Lin也回答了這個解決方案。用'RewriteRule'寫出everthing解決了我的問題。但我更喜歡使用mod_alias指令中更簡單的語法。 – Henry31 2014-09-23 11:30:16

回答

2

解決方案是隻使用mod_rewrite。當您將mod_alias(Redirect Permanent)和mod_rewrite(RewriteRule)指令混合在一起時,兩個模塊都將應用於每個URL,並且在兩者都得到應用的情況下,最終會出現一些意外行爲。

你需要做的第一件事就是改變RedirectRewrite

Redirect Permanent /shop/product_abc /shop/product_abc_v2 

到:

RewriteRule ^shop/product_abc(.*)$ /shop/product_abc_v2$1 [L,R=301] 

然後,你需要確保新規則是在正確的地方。訂單與重寫規則有關。

+0

非常感謝!我更喜歡使用更簡單的語法,如mod_alias(重定向永久)。但知道我明白爲什麼這不起作用。感謝您的快速幫助! :)我編輯我的.htaccess,把代碼放在正確的地方,並說它工作的finder :) – Henry31 2014-09-23 11:28:05