【问题标题】:Force redirect to SSL for all pages apart from one强制重定向到 SSL 的所有页面,除了一个
【发布时间】:2010-10-18 00:29:05
【问题描述】:

我正在尝试使用 apache2 的 mod_rewrite 来强制 SSL 连接到网站。到目前为止,该网站的 <VirtualHost> 条目中的以下内容运行良好:

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,NC,R,L]

这运行良好,并且重定向所有内容,这正是我想要的。

但是,网站上有一个特定页面使用 Google 地图 API,该 API 无法通过 SSL 使用,因此会在浏览器中触发混合内容警告。所以,我希望这个只有地图的页面不要重定向,并使用正常的非 ssl 连接。

我不想使用 SSL 的 URL 的格式为 /thing/add/{ID}/page3,其中 {ID} 是一个数值。

这可能吗?

【问题讨论】:

    标签: apache mod-rewrite ssl


    【解决方案1】:
    RewriteEngine On
    
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^thing/add/\d+/page3$ - [L]
    
    RewriteCond %{SERVER_PORT} ^443$
    RewriteRule ^(thing/add/\d+/page3) $ http://%{HTTP_HOST}/$1 [QSA,NC,R,L]
    
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,NC,R,L]
    

    规则从上到下处理;如果不在 SSL 上,第一个停止地图页面的重写;如果通过 SSL 访问,第二个(可选)将这些页面重定向到非安全页面;其他一切都适用旧规则。

    【讨论】:

    • 不客气。您可以尝试 %{HTTPS} ^.+$ 而不是 %{SERVER_PORT} 正则表达式(因为如果在 SSL 上 %{HTTPS} 应该是“开启”,否则未定义;那么您将独立于端口号),但我遇到了一些麻烦。
    猜你喜欢
    • 2015-08-20
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2015-09-21
    • 2013-12-06
    • 1970-01-01
    • 2016-11-08
    • 2012-10-10
    相关资源
    最近更新 更多