【问题标题】:Keep URL encoding after .htaccess rewrite.htaccess 重写后保留 URL 编码
【发布时间】:2016-11-21 11:08:13
【问题描述】:

我有以下 .htaccess 文件:

RewriteEngine On

# Rewrite www.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

假设我的域是foo.com。如果我打开http://foo.com/something,它将被重定向到http://www.foo.com/something。这很好用,除非something 包含任何url encoded 字符。

如果我打开http://www.foo.com/bar/file-with-%3F-in-nameREQUEST_URI 就是/bar/file-with-%3F-in-name

如果我打开http://foo.com/bar/file-with-%3F-in-name,但是,编码%3F的url在重写期间被解码为?REQUEST_URI变成/bar/file-with-QUERY_STRING-in-name

如何防止url编码的字符在重写过程中被解码?

我尝试使用 BNE 标志,但没有成功。

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    这是可以解决您的问题的规则版本:

    # Rewrite www.
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteCond %{THE_REQUEST} \s/+(\S*)\sHTTP
    RewriteRule ^ http://www.%{HTTP_HOST}/%1 [L,R=301,NE]
    
    • 诀窍是在被 Apache 解码之前从 THE_REQUEST 变量中获取请求 URI。
    • NE 仍然需要避免 %3F 变成 %253F

    我之前没有正确解释问题是我的错误。

    【讨论】:

      猜你喜欢
      • 2014-06-05
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      相关资源
      最近更新 更多