强制重定向到除一个以外的所有页面的SSL

时间:2009-04-07 10:24:29

标签: apache mod-rewrite ssl

我正在尝试使用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的网址格式为/thing/add/{ID}/page3,其中{ID}是数字值。

这可能吗?

1 个答案:

答案 0 :(得分:2)

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访问,第二个(可选)将这些页面重定向到非安全;除此之外,旧规则适用。