更改固定链接结构-htaccess中的重定向会中断存档链接

时间:2010-09-04 作者:TFM

当我开始写博客时,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中的重定向指令,或者我不能吃蛋糕,也不能吃蛋糕?

1 个回复
最合适的回答,由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 指令。

结束

相关推荐

Security and .htaccess

大约一个月前,我在一个与爱好相关的托管服务器上创建了一个WordPress博客。所以,我目前还不熟悉这一点。由于我担心安全性,我做的一件事就是安装插件WP安全扫描。根据插件结果,我的网站会被检查出来,但我在结果中看到的是一个红旗:文件。wp admin中不存在htaccess/(我在那里ssh了,它不存在)好的,所以我在这个问题上做了大量的搜索,找到了太多的信息。htaccess。我在WordPress上经历了强化WordPress。org网站等,也遇到了这篇文章:http://digwp.com/201