2

我刚刚将我的 wordpress 永久链接从domain.com/%year%/%month%/%post-slug%over 更改为domain.com/%post-slug%

我使用以下mod_rewrite规则将所有旧 URL 重定向到新 URL。

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.

对此的任何帮助将不胜感激。

4

2 回答 2

1

我不确定%post-slug%是什么样子,所以我不知道是否有更好的方法来区分它和%date%,但我推断%date%是两位数数字,因此您可以使用否定的前瞻断言来排除它。此外,您可能希望使用\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

于 2013-08-20T16:41:11.000 回答
1

Change the rule to

RedirectMatch 301 ^/[0-9]{4}/[0-9]{2}/([a-z0-9/-]{3,})$ http://www.site.com/$1
于 2013-08-20T16:15:59.767 回答