我想將網頁的子集強制爲https,並將所有其他網頁強制爲http。 在htaccess的我用下面的腳本,我在另一篇文章中,但沒有工作......將網頁的子集強制爲HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(login|signup)\.php https://%{HTTP_HOST}%{REQUEST_URI} [R,L,QSA]
RewriteCond %{HTTPS} on
RewriteCond ${REQUEST_URI} !(login|signup)\.php
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L,QSA]
HTTP被迫理所應當的,HTTPS是被迫所應當的,但如https://mywebsite.com/signup在瀏覽器中產生無限循環錯誤。任何想法出了什麼問題?
我更改爲以下代碼似乎工作,但現在由於網頁上的安全和不安全的項目,SSL僅部分實施。我檢查了URLS到圖像,樣式表和外部JavaScript文件這些都是相對的,應該不會造成問題......如果有人知道如何處理這個問題,我很樂意聽到它。
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/login$ [OR]
RewriteCond %{REQUEST_URI} ^/signup$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !login$
RewriteCond %{REQUEST_URI} !signup$
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
無需爲非登錄/註冊頁面強制使用HTTP(順便說一句,帳戶頁面(如果有的話) - 它們是否通過HTTP提供服務?)。請首先在您的代碼中生成正確的網址(即不是執行'),因此客戶將始終轉到HTTP而無需mod_rewrite的幫助。如果客戶想通過HTTPS訪問主頁或任何其他頁面,請讓他 - 這沒什麼不妥。只要你有適當的URL的所有鏈接,這將永遠不會發生,除非客戶有意改變URL。 – LazyOne
通過不強制HTTP,您將不會遇到安全頁面上不安全內容(CSS/JS/Images)的問題。這就是我一直在編碼我的網站的過程。是的 - 在現有網頁中更改所有鏈接以包含域名和協議是一項相當大的工作......但對於新頁面/新項目而言,**沒有區別**(沒有額外開銷)。是的 - 你應該能夠通過mod_rewrite修復它(添加一個或兩個更多的條件)..但這不是正確的方式(至少在我看來)。 – LazyOne
謝謝你的幫助。我現在使用mod_rewrite在需要連接的頁面上強制使用https。我刪除了強制使用http的部分,因爲這也強制將受保護頁面上的引用指向例如js/css/image文件被重定向到http(這些文件沒有在RewriteCond中驗證),並給出了在同一頁面上存在安全和非安全項目的問題。正如你所建議的一切正常,現在正確地引用一切正確的http或https(和後者強制https以防萬一用戶更改url)完整的URL。謝謝! – DigitalMD