【问题标题】:URL Encoded text not matching htaccess QUERY_STRINGURL 编码文本与 htaccess QUERY_STRING 不匹配
【发布时间】:2021-01-03 03:26:09
【问题描述】:

我的网站使用逗号分隔参数中的一些坐标,例如?coords=38.88,-77.03。我现在发现问题,因为 , 是 url 保留字符。该问题似乎仅限于链接与 Facebook 共享并且 Facebook 将其更改为 ?coords=38.88%2C-77.03 时。

我想长期修复它,但我需要对已共享的现有链接进行临时修复。如果人们要单击 Facebook 中的链接,我想要一个 .htaccess 规则将其更改为使用逗号。

当逗号后面有空格时,我已经有了类似的规则:

RewriteCond %{QUERY_STRING} (.*coords=-?\d{1,2}(?:\.\d+)?),(?:\s+|\%20|\+)(-?\d{1,3}(?:\.\d+)?,?.*) [NC]
RewriteRule ^ %{REQUEST_URI}?%1,%2 [L,NE,R=301]

我尝试将其更改为:

RewriteCond %{QUERY_STRING} (.*coords=-?\d{1,2}(?:\.\d+)?)(,|\%2C)(?:\s+|\%20|\+)(-?\d{1,3}(?:\.\d+)?,?.*) [NC]
RewriteRule ^ %{REQUEST_URI}?%1,%3 [L,NE,R=301]

我清除了我的缓存,甚至尝试将坐标编号更改为新的,但我无法让它重定向。我做错了什么,我该如何解决?

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite


    【解决方案1】:

    您之前的非捕获组不是可选的,因此它在匹配 %2C 并失败后尝试匹配 1+ 个空格。你可以使用这条规则:

    RewriteCond %{QUERY_STRING} (.*coords=-?\d{1,2}(?:\.\d+)?)(?:[+\s]+|\%2C|\%20)+(-?\d{1,3}(?:\.\d+)?,?.*) [NC]
    RewriteRule ^ %{REQUEST_URI}?%1,%2 [L,NE,R=301]
    
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2021-11-02
    相关资源
    最近更新 更多