gpt4 book ai didi

.htaccess - htaccess RewriteRule 带有文字问号(不是查询字符串)

转载 作者:行者123 更新时间:2023-12-04 13:44:05 25 4
gpt4 key购买 nike

我需要能够匹配问号,因为存在翻译文本编码错误,并且 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

最佳答案

https://example.com/Documentation/Product????/index.html


你说它“不是查询字符串”,但实际上它就是这样。这就是为什么您无法将其与 RewriteRule 匹配的原因。图案。上面的 URL 拆分如下:
  • URL-路径:/Documentation/Product (与 RewriteRule 模式匹配)
  • 查询字符串:???/index.html (注 3 ? - 第一个开始查询字符串)

  • 要匹配查询字符串,您需要额外的 RewriteCond检查 QUERY_STRING 的指令服务器变量。

    例如,要匹配上述 URL,您需要执行以下操作:
    RewriteCond %{QUERY_STRING} ^\?*/index\.html
    RewriteRule ^Documentation/Product$ https://s3.amazonaws.com/company-documentation/Help/Product/index.html [NC,R,L]

    这匹配任意数量的错误 ?在查询字符串的开头。

    我添加了 R ( redirect ) 标志。您的指令(没有 R 标志)无论如何都会触发外部重定向(因为您在替换中指定了一个绝对 URL),但最好在这里明确。这也是一个临时 (302) 重定向。如果这应该是永久性的 (301),则将其更改为 R=301 ,但只有在您确认它工作正常后(301 被浏览器硬缓存,因此可能会使测试出现问题)。

    更新:

    ...so I want the rule above to match both question marks and any other character.



    只有URL中有问号才会有查询字符串,所以我认为这两条规则最好分开。

    如果在查询字符串的开头可能有任何错误的字符,并且如果您想捕获 URL 的结尾部分(就像您在原始指令中所做的那样,例如 index.html),那么您可以修改上面的内容以阅读:
    RewriteCond %{QUERY_STRING} /(.*)$
    RewriteRule ^Documentation/Product$ https://s3.amazonaws.com/company-documentation/Help/Product/%1 [NC,R,L]

    请注意 %1 (与 $1 相反)替换字符串中的反向引用。这是对最后匹配的 CondPattern 中捕获的组的反向引用(即 /(.*)$ )。

    您可以使用现有指令(但请记住包含 R 标志)来获取更多不包含 ? 的“普通”URL。 (即查询字符串)。

    注意:在此示例中,将参数括在双引号中是完全可选的。只有在模式或替换参数中有未转义的空格时才需要它们。

    总之
    # Redirect URLs of the form:
    # "/Documentation/Product?<anything#1>/<anything#2>"
    RewriteCond %{QUERY_STRING} /(.*)$
    RewriteRule ^Documentation/Product$ https://s3.amazonaws.com/company-documentation/Help/Product/%1 [NC,R,L]

    # Redirect URL-paths of the form (no query string):
    # "/Documentation/Product<something>/<anything>"
    RewriteRule ^Documentation/Product[^/]+/(.*) https://s3.amazonaws.com/company-documentation/Help/Product/$1 [NC,R,L]

    关于.htaccess - htaccess RewriteRule 带有文字问号(不是查询字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52188225/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com