【问题标题】:Apache RewriteRule avoiding loops with regexApache RewriteRule 使用正则表达式避免循环
【发布时间】:2021-01-04 17:42:03
【问题描述】:

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

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

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

首先,这是一个有效的网址吗?如果不是,那么我在这里的兴趣只是弄清楚如何避免通常使用涉及正则表达式的 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 标志足以让它不再处理任何规则,包括它自己。也许我需要一个 RewriteCond?

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

这些 RewriteRule 将基于 access_log 中的条目创建,因此我们将为每个条目提供确切的模式,但我希望我可以遵循一些通用准则来防止 RewriteRule 循环,例如上述循环。

实际网址在这里:

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

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

【问题讨论】:

  • 如果您正在做 Joomla 开发,请在Joomla Stack Exchange 注册。每当您有与 Joomla 直接相关的问题或将受益于对 CMS 及其扩展有深入了解的志愿者的支持时,请在此处发布您的问题。

标签: regex apache redirect mod-rewrite


【解决方案1】:

您也许可以将此规则用于此重定向:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2021-05-30
    相关资源
    最近更新 更多