我把我的网站移到了一个带有新CMS的新服务器上,所以我不得不进行大量301重定向正常的301重定向无法识别我旧url的url路径,所以我尝试制作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中有第二个路径(第二个示例),重定向就会指向主类别,而不是子类别。所以它基本上忽略了url路径。。。
尝试反转您的规则,或者在第一个规则的末尾添加一个$:
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将只使用第一条规则,而不必进一步查看。
对于通用解决方案,引用apache重写指南:
将Homedirs移动到不同的Web服务器描述:
许多网站管理员要求解决以下情况:
他们只想将一台网络服务器上的所有homedirs重定向到另一台服务器。他们在建立一个新的网络服务器时通常需要这样的东西,随着时间的推移,这个服务器将取代旧的。
解决方案:
mod_rewrite的解决方案微不足道。在旧的网络服务器上,我们只是将所有/~user/anypath URL重定向到http://example.com/~user/anypath。
上的重写引擎
重写规则^/~(.+)http://example.com/~1美元[R,L]
在你的情况下,URL结构已经改变,所以ôkio的建议会起作用。