Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用mod_rewrite更改永久链接现在会出现内部服务器错误500_Regex_Wordpress_Mod Rewrite - Fatal编程技术网

Regex 使用mod_rewrite更改永久链接现在会出现内部服务器错误500

Regex 使用mod_rewrite更改永久链接现在会出现内部服务器错误500,regex,wordpress,mod-rewrite,Regex,Wordpress,Mod Rewrite,我刚刚将我的wordpress永久链接从domain.com/%year%/%month%/%post slug%更改为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% 到 也

我刚刚将我的wordpress永久链接从
domain.com/%year%/%month%/%post slug%
更改为
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%

也发出了一个
404
错误。为了解决日期问题,我修改了上面的代码,将字符计数包括在内(最小值为
3
,最大值为
300

RedirectMatch 301 ^/[0-9]{4}/[0-9]{2}/([a-z0-9\-/]{3,300}+) http://www.site.com/$1
但是我现在收到一个
500内部服务器错误

如果您对此有任何帮助,我们将不胜感激。

将规则更改为

RedirectMatch 301 ^/[0-9]{4}/[0-9]{2}/([a-z0-9/-]{3,})$ http://www.site.com/$1

我不确定%post slug%是什么样子,所以我不知道是否有更好的方法来区分它和%date%,但我推断%date%是一个两位数的数字,所以可以使用否定的前瞻性断言来排除它。此外,您可能希望使用\d而不是[0-9](它们可以互换,但第一个更短)

这比检查字符数更可靠,除非您确定%post slug%不能少于三个字符。当然,如果%post slug%可以是两位数,我建议的规则将跳过它。但在这种情况下,正则表达式无法区分两者之间的区别

此外,根据您所写的内容,我假设在%date%之后不会出现任何内容。如果之后还有其他零件,请将规则更改为:

RedirectMatch 301 ^/\d{4}/\d{2}/(?!\d{2}($|/))([a-z0-9\-/]+) http://www.site.com/$2

(注意结尾处的$2而不是$1

完成Ravi。仍然给我500个内部服务器错误是的,我发布的第一个代码是有效的。除了重定向到并给出404错误OK,在确保第一个有效后,只需将其中的加号
+
更改为
{1,}
,然后查看发生了什么。使用相同的源url来测试它们。Ravi,我试过了,并将最小字符数设置为4,成功了。非常感谢。然后
{3,}
也可以工作。问题是在关闭
+
后出现的
+
无效,并且缺少标记字符串结尾的
$
。请您通过接受答案来标记此问题是否已结束?当您的问题得到解决时,您应该对有用的答案进行投票,并接受您使用的答案或您认为最适合解决此问题的答案,而不是发表评论以感谢他人(这通常会在一段时间后被mods删除)。你至少需要15个代表才能投票,所以在投票之前,你只能接受一个答案。然而,请注意,你接受一个答案获得+2次重复,而你已经有6次了,所以这将使你达到一半。谢谢你,Adi。我现在增加了我的代表,并对你的答案投了更高的票。
RedirectMatch 301 ^/\d{4}/\d{2}/(?!\d{2}$)([a-z0-9\-/]+) http://www.site.com/$1
RedirectMatch 301 ^/\d{4}/\d{2}/(?!\d{2}($|/))([a-z0-9\-/]+) http://www.site.com/$2