【问题标题】:htaccess redirect url with trailing %20htaccess 重定向 url 尾随 %20
【发布时间】:2020-05-03 19:04:12
【问题描述】:

我们在我们的网站上使用漂亮的网址。几年前,我让一名外部技术人员添加了反向链接。他做得很好,但在一种情况下,他始终添加一个带有尾随空格字符的链接。

https://www.example.com/item/item/%20

这已被编入索引为%20,我可以在我的反向链接报告中看到,有 87 个网站指向最后带有%20 的 URL。

如果我可以重定向它,那么我的页面/item/item/ 将获得 87 个反向链接。

我们使用重写规则,并且我已经尝试了所有解决堆栈溢出问题的方法,但都没有奏效。一些无效的解决方案是:

RewriteEngine on
RewriteRule ^(.*[^\ ])\ +$ /$1

RedirectRule (.*)\s$ $1 [R=301]

RewriteRule ^(.*/|)[\s%20]+(.+)$ $1$2 

我尝试了重定向 301,但这些也不起作用。

redirect 301 /item/item/%20 /item/item/

redirect 301 /item/item/+ /item/item/

一些有用的东西 - 这不是一个网站范围的模式。它只是一个错误地传播到世界的特定 URL。它不是字符串中任何地方的空格 - 它总是在末尾。

谢谢。

我也可以将结尾的 %20 转换为已知字符,例如 - 因为我可以将其重定向 /item/item/-item/item/

【问题讨论】:

  • 您的服务器当前如何响应这些带有尾随 空格 的请求? 403禁止?这些 URL 是如何路由的? /item/item/ 是完全虚拟的还是以某种方式与文件系统相关?
  • 它进入我们的 404 页面。需要明确的是,传入链接看起来像 /item/item/%20,这是我们网站上记录的内容。我认为让我感到困惑的是 htaccess 规则与已翻译的空格一起使用,并且在 htaccess 语法中,空格是分隔符。也不使用像 + 这样的普通 URL 编码。
  • “htaccess 规则适用于已翻译的空间” - 不一定。 RewriteRule pattern 匹配的 URL 路径是 %-decoded,但是,并非所有服务器变量都是。 “空格是分隔符” - 如果参数包含空格,那么您可以将整个参数括在双引号中(或反斜杠转义空格 - 正如您所做的那样,或在正则表达式中使用 \s 速记字符类)。 “也不使用像 + 这样的普通 URL 编码” - +(编码空间)仅适用于 URL 的查询字符串部分。在 URL 路径中,+ 是文字 +(加号)。

标签: regex apache .htaccess mod-rewrite trailing


【解决方案1】:

您可以将此规则用作您的最顶层规则,就在RewriteEngine On 行的下方:

RewriteEngine On

RewriteRule ^(.*)(?:\s|\x20)+$ /$1 [L,NE,R=301]

【讨论】:

  • 确保您在新浏览器中进行测试,如果由于某种原因无法正常工作,请告诉我。
  • 谢谢!这似乎有效,并且比我发现的要好。
猜你喜欢
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
相关资源
最近更新 更多