我想确保我的应用程序中的少量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个。
由于
答案 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重定向为永久重定向,并由浏览器缓存)