我使用以下内容要求网站的结帐部分需要 SSL:
<Directory "/var/www/html">
RewriteEngine on
Options +FollowSymLinks
Order allow,deny
Allow from all
RewriteCond %{SERVER_PORT} !^443$
RewriteRule \.(gif|jpg|jpeg|jpe|png|css|js)$ - [S=1]
RewriteRule ^checkout(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</Directory>
例如,点击http://www.example.com/checkout会重定向到https://www.example.com/checkout
该规则将跳过通常包含在页面中的文件扩展名,这样您就不会收到混合内容警告。您应该根据需要添加到此列表中。
如果您想要多个页面,请将 RewriteRule 更改为:
RewriteRule ^(checkout|login)(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
当然,该目录应该与您服务器上的实际路径匹配。此页面还可以为您的特定需求提供更多信息:http: //www.whoopis.com/howtos/apache-rewrite.html
我在运行 Plesk 8.6 的网站上使用它,但这无关紧要。这是在我的 vhost.conf 文件中,就像把它放在你的 httpd.conf 文件中一样。我不确定您是否需要调整任何内容才能在 .htaccess 文件中使用它,但我对此表示怀疑。如果添加到 conf 文件中,请不要忘记重新启动 apache 以重新加载配置。
如果您像我一样只想在特定页面上使用 SSL,那么您还需要一个重写规则,将您发送回常规 http 进行其余操作。您可以使用以下内容获得相反的效果:
RewriteCond %{SERVER_PORT} ^443$
RewriteRule \.(gif|jpg|jpeg|jpe|png|css|js)$ - [S=1]
RewriteRule !^(checkout|login)(.*)$ http://%{SERVER_NAME}%{REQUEST_URI} [L,R]
如果您像我一样使用 Plesk,请记住所有非 SSL 流量都使用 vhost.conf 文件,但所有 SSL 流量都使用 vhost_ssl.conf 文件。这意味着您的第一个要求 SSL 的重写规则将进入 vhost.conf 文件,但第二个强制返回非 SSL 的规则必须进入 vhost_ssl 文件。如果您使用的是 httpd.conf 或 .htaccess,我认为您可以将它们放在同一个地方。
我还在我的博客上发布了这个教程:Apache rewrite rules to force secure/non-secure pages。