【问题标题】:Force the mod_rewrite to pass request parameters when rewriting重写时强制 mod_rewrite 传递请求参数
【发布时间】:2014-12-31 21:30:45
【问题描述】:

我正在尝试让网络服务器将所有用户从 http 重定向到 https。这是我正在使用的代码:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HTTPS} !=on
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]

但是,我意识到,当用户最初向 http 发送带有信息的请求时,在执行此重写规则之后,POST 数据似乎丢失了。

有什么方法可以在重写为 HTTPS 时确保所有 POST 数据也都发送完毕。

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    有两个HTTP status codes307(临时)和308(永久),您可以在这种情况下使用它们。这些状态码与302301 重定向码的作用相同,但保持方法(GET/POST)不变

    RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=308,L]
    

    不过,您应该使用307 进行测试,直到一切正常。有关详细信息,请参阅此答案Tips for debugging .htaccess rewrite rules

    【讨论】:

    • 在 Linux 上,虽然它适用于 307,但在尝试使用 308 时会报错:Syntax error on line 14 of /etc/httpd/conf.d/file.conf: RewriteRule: invalid HTTP response code '308' for flag 'R'
    • @Radu 我已经用.htaccess 和 Apache 的主配置文件重新测试了这个。在这两种情况下,307308 的重定向都按预期工作。我的 Apache 在 Ubuntu 14.04 上运行,版本为 2.4.7。
    • 添加了对 308 的支持 in Apache 2.4.3(“添加缺少的向 IANA 注册的 HTTP 状态代码。”)
    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2011-03-14
    • 2015-03-17
    • 1970-01-01
    • 2012-09-10
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多