【问题标题】:.htaccess RewriteRule to redirect http to https messes up % escaped parameters in URL.htaccess RewriteRule 将 http 重定向到 https 弄乱了 URL 中的 % 转义参数
【发布时间】:2018-03-19 16:02:58
【问题描述】:

我在.htaccess 文件中使用类似于以下内容的内容将所有http 请求重定向到https

RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

这可行,除非是使用转义参数传递 URL 的情况,例如:

http://www.example.com/download.php?go=app%20name

重定向时,又被错误地转义为:

https://www.example.com/download.php?go=app%2520name

我该如何解决这个问题?

【问题讨论】:

    标签: linux apache .htaccess ubuntu https


    【解决方案1】:

    在您的规则中使用NE or noescape flag

    RewriteEngine on
    
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
    

    确保在测试更改之前清除浏览器缓存。

    【讨论】:

    • 哦,伙计,我忘了网络浏览器缓存。我只花了 10 分钟来了解为什么 NE 条件不起作用。然后在底部看到您的编辑。只是好奇,浏览器缓存如何影响它? .htaccess 在服务器上被解释,客户端浏览器没有它的概念。
    • 如果客户端浏览器从 Web 服务器获得 301 状态,则它会在本地缓存原始 URL 和重定向 URL。下次您在浏览器中访问或输入原始 URL 时,它会提供重定向 URL 并 跳过 访问 Web 服务器。
    • 谢谢。只是出于好奇,是否有一个快捷方式可以清除 Chrome 中的缓存仅用于一页?类似于 Shift+F5 用于清除 CSS 缓存。
    • 你可以一起试试ctrl + R
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    相关资源
    最近更新 更多