Apache:重写规则以从永久链接中删除斜杠?

Apache:重写规则以从永久链接中删除斜杠?

我见过之前关于 ServerFault 的这个问题, 而且我要相似的东西,但我不确定如何实现它。

我想要的是删除所有斜线除了域名后面的永久链接外,其他均来自永久链接。例如:

http://www.muycomputerpro.com/Actualidad/Especiales/La-Ciudad-Eficiente-Netapp

将被重定向至

http://www.muycomputerpro.com/ActualidadEspecialesLa-Ciudad-Eficiente-Netapp

我需要它来纠正我的 WordPress 博客上剩余的一些 404 错误在 Apache 下web 服务器。那么,正确的重写规则是什么?

答案1

由于 RewriteRule 以路径开头(因此我们不需要担心域),您可以说的是,您要删除除第一个斜杠之外的所有斜杠,或者,在斜杠前面没有字符串开头时删除斜杠。

在正则表达式中这意味着使用负向后视,如下所示:

(?<!^)/

其中(?<!...)是负向后视语法,^表示字符串的开始。

因此在配置中它看起来像:

RewriteRule (?<!^)/ $1 [L,R=301]

这里有一点需要猜测,即$1表示空字符串 - 我以前没有用 mod_rewrite 这样做过,而且我找不到任何解释是否有“正确”的方法用空字符串替换的内容,但在其他正则表达式引擎中,使用未使用的反向引用将导致空字符串,所以应该没问题。(如果不行,我会看看是否""可行。)

哦,还有[...]部分是一个逗号分隔的重写选项列表。L是 Last - 表示不处理进一步的规则(通常这是期望的行为),R=301是 301(永久)重定向(指示蜘蛛用新的 URL 更新其记录)。 有关在此处重写选项

相关内容