it-swarm.cn

永久链接结构的更改 - htaccess中的重定向会破坏归档链接

当我开始使用我的博客时,永久链接和以下结构:

http://<domain>/%year%/%monthnum%/%day%/%postname%/

前段时间,我只将永久链接结构更改为“http://<domain>/%postname%/”。

为了解决旧永久链接结构的外部链接,我在htaccess文件中添加了以下行:

RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4

现在的问题是重定向线打破了存档链接,例如。 “http://<domain>/2010/09/02”被重定向到首页,而不是显示2010年9月2日的帖子。

是否有可能纠正htaccess中的重定向指令,或者我不能吃蛋糕并且也可以吃它?

2
TFM

Mod_Alias的RedirectMatch不如Mod_Rewrite强大。如果您的主机上有Mod_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)检查不匹配Archive-URL,只有在不匹配的情况下,才会执行重定向的规则。 RewriteRule基本上和RedirectMatch指令一样。

2
hakre