RewriteRule重定向路径不起作用

时间:2014-04-16 14:44:27

标签: apache .htaccess mod-rewrite path

我将我的网站移动到一个带有新CMS的新服务器,所以我不得不制作很多301重定向。 '正常' 301重定向无法识别我的旧网址的网址路径,所以我尝试制作RewriteRules,这就是现在的样子:

Options -MultiViews
RewriteEngine On
RewriteBase /

RewriteRule ^Category http://www.example.com/category [R=301,L]
RewriteRule ^Category/Subcategory http://www.example.com/category-subcategory [R=301,L]

第一个RewriteRule可以工作,但只要旧URL(第二个示例)中有第二个路径,重定向就会指向主要的cateagy,而不是子类别。所以它基本上忽略了网址路径......

2 个答案:

答案 0 :(得分:0)

尝试颠倒您的规则,或在第一个规则的末尾添加$:

RewriteRule ^Category$ http://www.example.com/category [R=301,L]
RewriteRule ^Category/Subcategory http://www.example.com/category-subcategory [R=301,L]

说明:Category / Subcategory也匹配第一个规则,并且因为你在第一个规则中使用了L标志,所以Apache只会使用这个第一个规则而不用再费力了。

答案 1 :(得分:0)

对于通用解决方案,请引用apache rewrite guide

  

将Homedirs移至不同的Web服务器描述:

     

许多网站管理员要求解决以下问题:

     

他们希望将网络服务器上的所有homedir重定向到另一个网络服务器。在建立一个新的网络服务器时,他们通常需要这样的东西,随着时间的推移它将取代旧的网络服

     

解决方案:

     

使用mod_rewrite解决方案很简单。在旧的网络服务器上我们只是   将所有/ ~user / anypath网址重定向到http://example.com/~user/anypath

     

上的RewriteEngine      

RewriteRule ^ /〜(。+)http://example.com/~ $ 1 [R,L]

在您的情况下,网址结构已更改,因此ôkio的建议可行。