当我开始写博客时,permalinks和以下结构:
http://<domain>/%year%/%monthnum%/%day%/%postname%/
不久前,我将permalink结构更改为“
http://<domain>/%postname%/
“只是。
为了处理旧permalink结构的外部链接,我在htaccess文件中添加了以下行:
RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4
现在的问题是重定向行中断了存档链接,例如。“
http://<domain>/2010/09/02
“被重定向到首页,而不是显示2010年9月2日的帖子。
有没有可能更正htaccess中的重定向指令,或者我不能吃蛋糕,也不能吃蛋糕?
最合适的回答,由SO网友:hakre 整理而成
Mod\\u别名的RedirectMatch不如Mod\\u Rewrite强大。如果您的主机上有Mod\\u Rewrite(例如,相当长的永久链接可以使用它),那么只有当URL不是存档链接格式时,才可以进行重定向。
为了测试这种情况,有RewriteCond
要发出重定向命令,有RewriteRule ... [R=301]
指令。
基于您的数据的示例:
RewriteCond %{REQUEST_URI} !^/((20|19)[0-9]{2})/([0-9]{2})/[0-9]{2}$ [NC]
RewriteRule ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://<domain>/$4 [R=301,L]
这是未经测试,但我认为它应该做的工作。我使用了量词({2})来更好地指定您期望的数字数量。在RewriteCond的旁边,我创建了一个仅与20匹配的模式。。和19。。年。
第一行(条件,RewriteCond
) 检查是否与存档URL不匹配,仅当不匹配时,才会执行重定向规则。这个RewriteRule
基本上和你的RedirectMatch
指令。