【发布时间】:2018-09-05 14:58:04
【问题描述】:
我需要能够匹配问号,因为存在翻译文本编码错误,并且部分 URL 最终被硬编码为带有问号。这是我需要重写的 URL 示例:
https://example.com/Documentation/Product????/index.html
这是我当前的重写规则。当“产品”后面的字符不是问号时,它可以工作,但如果是,则规则不适用。
RewriteRule "^Documentation/Product[^/]+/(.*)$" "https://s3.amazonaws.com/company-documentation/Help/Product/$1" [L,NC]
如何确保在此规则中问号也被视为字符?我不能期望 URL 中只有问号而不是原始的非英文字符,所以我希望上面的规则同时匹配问号和任何其他字符。
我发现这个话题似乎很相关,但标志没有帮助,答案也没有解释如何克服“旁白”中提到的问题。 https://webmasters.stackexchange.com/questions/107259/url-path-with-encoded-question-mark-results-in-incorrect-redirect-when-copied-to
【问题讨论】:
-
这应该与您现有的规则一起使用吗? IE。您有
/Documentation/Product<something>/<optional-end-part>形式的 URL 重定向到https://s3.amazonaws.com/company-documentation/Help/Product/<optional-end-part>?index.html是变量吗?即使在这些格式错误的 URL 中? -
index.html 部分是可变的。我对“普通”网址还有其他规则。这个只需要抓住奇怪的作为产品的最后手段。
-
Aside:虽然它可能看起来相关,但链接的问题与此问题没有直接关系。在链接的问题中,源 URL 在 URL 路径中有 literal 问号(即问号是 URL 编码的),因此没有查询字符串(问题 #1)。这也被捕获(问题#2)并传递给替换(问题#3)。链接问题中的“旁白”并不是真正描述“问题”,只是一个过程。您可以使用
NE标志来防止后续的?被 URL 编码,但这不一定是可取的。
标签: .htaccess mod-rewrite url-rewriting