我刚刚将我的wordpress永久链接从domain.com/%year%/%month%/%post-slug%
更改为domain.com/%post-slug%
我使用以下mod_rewrite
规则将所有旧网址重定向到新网址。
RedirectMatch 301 ^/[0-9]{4}/[0-9]{2}/([a-z0-9\-/]+) http://www.site.com/$1
问题在于重定向所有基于日期的档案
domain.com/%year%/%month%/%date%
到
domain.com/%date%
也发出404
错误。为了解决日期问题,我修改了上面的代码以包含字符数(最小3
和最多300
)
RedirectMatch 301 ^/[0-9]{4}/[0-9]{2}/([a-z0-9\-/]{3,300}+) http://www.site.com/$1
但我现在得到500 Internal Server error
。
对此有任何帮助将不胜感激。
答案 0 :(得分:1)
将规则更改为
RedirectMatch 301 ^/[0-9]{4}/[0-9]{2}/([a-z0-9/-]{3,})$ http://www.site.com/$1
答案 1 :(得分:1)
我不确定%post-slug%是什么样的,所以我不知道是否有更好的方法来区分它和%date%,但我推断%date%是一个2位数字,因此您可以使用负前瞻断言来排除它。此外,您可能希望使用 \ d 而不是 [0-9] (它们可以互换,但第一个更短)。
RedirectMatch 301 ^/\d{4}/\d{2}/(?!\d{2}$)([a-z0-9\-/]+) http://www.site.com/$1
这比检查字符数更可靠,除非您确定%post-slug%永远不会少于三个字符。当然,如果%post-slug%可能是一个2位数字,我建议的规则将跳过它。但在这种情况下,正则表达式无法区分它们。
另外,根据你写的内容,我假设在%date%之后没有任何结果。如果之后可能还有其他部分,请将规则更改为:
RedirectMatch 301 ^/\d{4}/\d{2}/(?!\d{2}($|/))([a-z0-9\-/]+) http://www.site.com/$2
(注意 $ 2 ,而不是 $ 1 )