mod_rewrite:2个文件应始终为SSL,其余文件始终为HTTP

时间:2014-09-05 15:21:55

标签: mod-rewrite ssl https

我想确保我的应用程序中的少量URL始终通过SSL提供;其余部分应始终通过HTTP提供。

我当前的mod_rewrite规则集如下:

RewriteCond %{HTTPS}            off
RewriteRule ^/?account.html$    https://example.com/account.html [L]
RewriteRule ^/?checkout.html$   https://example.com/checkout.html [L]

RewriteCond %{HTTPS}            on
RewriteCond %{REQUEST_URI}      !/account.html$
RewriteCond %{REQUEST_URI}      !/checkout.html$
RewriteRule (.*)                http://example.com/$1 [L]

每个RewriteCond中的第一个文件正常工作(本例中为account.html)。第二个文件不起作用 - 服务器“以永远不会完成的方式重定向”。

有关如何使这项工作的任何想法?在生产中,将有超过2个仅限SSL的URL,可能是7到10个。

由于

1 个答案:

答案 0 :(得分:1)

您必须使用R标记重定向网址

RewriteEngine On

# redirect account.html or checkout.html (if http) to https
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/(account|checkout)\.html$ [NC]
RewriteRule ^ https://%{HTTP_HOST}/%1.html [R,L]

# redirect other urls (if https) to http
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/(account|checkout)\.html$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R,L]

注意:我使用R标志,默认情况下执行302重定向。当[R,L]有效时,可以随意替换[R=301,L](301重定向为永久重定向,并由浏览器缓存)