我用下面需要一個網站的結帳部分要求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 ^(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。
當我使用您的代碼示例,然後在Firefox中並轉到http://example.com/signup以測試其是否重定向到https時,我收到以下Firefox錯誤:「Firefox已檢測到服務器正在以一種永遠不會完成的方式重定向這個地址的請求。「 – 2008-11-03 03:51:13
您可能已將Redirect指令添加到SSL和非SSL網站。您需要將它*僅*添加到非SSL網站。 – 2008-11-03 03:57:58