regex - URL 编码文本与 htaccess QUERY_STRING 不匹配
问题描述
我的网站使用逗号分隔参数中的一些坐标,例如?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]
我清除了我的缓存,甚至尝试将坐标编号更改为新的,但我无法让它重定向。我做错了什么,我该如何解决?
解决方案
您之前的非捕获组不是可选的,因此它在匹配%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]
推荐阅读
- python - 在python中返回一个字符串并且只得到一个空数组
- mysql - 使用 SQL 识别和标记记录时间
- python - Solver (baron) 返回非零返回码 (1)
- .net - 搜索 Microsoft.Extensions.Caching.Memory.MemoryCache 的源代码
- html - 如何根据容器而不是屏幕大小来提供图像大小
- scala - 哪种方式是使用 Scala 在 Play Framework 中进行路由的更好做法?
- ios - Swift 使用小型大写字母
- angular - 如何使用 @ngrx/data 自定义减速器?
- angular - 对预检请求的响应未通过访问,并且不存在“Access-Control-Allow-Origin”标头。使用 [HttpPost] 时
- php - 循环中的引导网格