Apache RewriteRule使用正则表达式避免循环



我知道以前也有人问过类似的问题,但我一直找不到与我的情况类似的问题。

我在我们的Joomla网站上提出了以下表格的请求:

/news/privacy/how-2018-became-facebook%C3%A2%C2%80%C2%99s-worst-year-in-privacy-and-security

首先,这是一个有效的URL吗?如果没有,那么我在这里的兴趣将仅在于弄清楚如何避免使用涉及regex的URL的重定向循环。

这似乎是由于文章标题中的Microsoft特殊字符造成的。我想用正则表达式创建一个重写器,将用户重定向到正确的URL。

RewriteRule /news/privacy/how-2018-became-facebook.*s-worst-year-in-privacy-and-security /news/privacy/how-2018-became-facebooks-worst-year-in-privacy-and-security [L,R=301]

然而,以上内容只会导致重定向循环。我还尝试用句点替换上面所有的编码字符,浏览器只会报告URL无效。我认为L标志足以让它不进一步处理任何规则,包括它自己。也许我需要重写密码?

这些URL也大多由机器人生成。我认为他们是根据文章的标题猜测逻辑URL,而实际的URL是上面提供的替换中出现的。我们正在努力消除这些带有微软特殊字符的标题,但目前,我们希望创建一个适当的替代品。这对我来说也是一个学习练习

这些RewriteRules将基于access_log中的条目创建,因此我们将对每个条目都有确切的模式,但我希望遵循一些通用准则来防止RewriteRule循环,如上面的循环。

实际URL在这里:

https://linuxsecurity.com/news/privacy/how-2018-became-facebooks-worst-year-in-privacy-and-security

您可以看到,当文章创建时,标题是使用Microsoft特殊引号字符创建的。

您可以使用此规则进行重定向:

RewriteRule ^(news/privacy/how-2018-became-facebook).+s(-worst-year-in-privacy-and-security)/?$ /$1s$2 [L,R=301]

最新更新