【问题标题】:Problems with SSL to non-SSL htaccess redirectSSL 到非 SSL htaccess 重定向的问题
【发布时间】:2015-03-20 06:55:30
【问题描述】:

我需要一些有关 URL 重写的帮助。

我只需要通过 SSL 处理 1 个动态页面(登录),所有其他页面都需要重定向到 HTTP。

所以这里是我的 .htaccess 文件:443 虚拟主机:

RewriteEngine on
RewriteRule ^signin$  https://www.page.com/?s=signin [L,NC]

RewriteCond %{REQUEST_URI} !^\/(signin)+ [NC]
RewriteRule ^(.*)$ http://%{SERVER_NAME}/$1 [R=302,L]

发生的情况是,https://www.page.com/signin 通过 302 重定向 重定向到 http://www.page.com/?s=signin

我做错了什么?

【问题讨论】:

  • 为什么只有你的登录页面https?那不是默认的目的吗?使用 https 很好,但请确保您正确使用它。
  • 我认为你应该重新考虑推理。登录应该是 HTTPS,但如果您的服务器可以处理,登录页面也应该如此。对于大多数流量场景,额外的负载是最小的。为什么要安全登录然后停止使用 HTTPS?
  • 搜索引擎优化相关的东西......我们只需要一些页面是安全的
  • 您还需要在第一条规则上使用 [R] 标志。虽然我认为这不会完全解决你的问题。另外,请小心像这样重定向。很容易泄露通过 https 页面设置的会话信息或 cookie,然后通过 http 可用。

标签: php apache .htaccess mod-rewrite ssl


【解决方案1】:

您的问题是用 PHP 标记的。你的登录页面是 PHP 的吗?

将此添加到您的登录页面顶部,该页面将强制使用 HTTPS。

if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == "") {
    $redirect = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    header("Location: $redirect");
}

【讨论】:

    【解决方案2】:

    好的,我认为这是一个 apache 问题。先解释一下似乎发生了什么:

    您的第一条规则重定向到

    https://www.page.com/?s=signin 
    

    这与 REQUEST_URI 条件不匹配 !^/(signin)+;所以第二条规则重定向到

    http://www.page.com/?s=signin 
    

    你的情况可能应该是这样的:

    RewriteCond %{REQUEST_URI} !^\/\?s=signin [NC]
    

    要查看 mod_rewrite 的确切作用,请启用重写日志(如果可以) - 如何执行此操作取决于 apache 版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 2012-02-06
      • 2018-09-11
      • 1970-01-01
      • 2018-05-27
      相关资源
      最近更新 更多