2011-07-11 57 views
0

我想將網頁的子集強制爲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] 
+0

無需爲非登錄/註冊頁面強制使用HTTP(順便說一句,帳戶頁面(如果有的話) - 它們是否通過HTTP提供服務?)。請首先在您的代碼中生成正確的網址(即不是執行'),因此客戶將始終轉到HTTP而無需mod_rewrite的幫助。如果客戶想通過HTTPS訪問主頁或任何其他頁面,請讓他 - 這沒什麼不妥。只要你有適當的URL的所有鏈接,這將永遠不會發生,除非客戶有意改變URL。 – LazyOne

+0

通過不強制HTTP,您將不會遇到安全頁面上不安全內容(CSS/JS/Images)的問題。這就是我一直在編碼我的網站的過程。是的 - 在現有網頁中更改所有鏈接以包含域名和協議是一項相當大的工作......但對於新頁面/新項目而言,**沒有區別**(沒有額外開銷)。是的 - 你應該能夠通過mod_rewrite修復它(添加一個或兩個更多的條件)..但這不是正確的方式(至少在我看來)。 – LazyOne

+0

謝謝你的幫助。我現在使用mod_rewrite在需要連接的頁面上強制使用https。我刪除了強制使用http的部分,因爲這也強制將受保護頁面上的引用指向例如js/css/image文件被重定向到http(這些文件沒有在RewriteCond中驗證),並給出了在同一頁面上存在安全和非安全項目的問題。正如你所建議的一切正常,現在正確地引用一切正確的http或https(和後者強制https以防萬一用戶更改url)完整的URL。謝謝! – DigitalMD

回答

0
  1. 嘗試加入這一行的地方在你的.htaccess的頂部:

    Options +FollowSymLinks -MultiViews

  2. 也許你有這樣做重定向其他一些規則 - 如果這將是很好提供你的.htaccess文件的全部內容。

  3. 您可能在實際的php腳本中重定向。

在任何ACSE - 如果你可以編輯Apache的配置文件(httpd.conf文件或的httpd-vhost.conf),那麼你可以啓用重寫調試RewriteLoglevel 9),看看究竟是怎麼回事 - 這是最好的選擇(如果可以的話)。

+0

感謝您的幫助。添加-MultiViews不會更改錯誤,沒有其他重定向規則,我完全清理了我的htaccess文件以進行調試。我沒有訪問配置文件,但我會問我的主機。 – DigitalMD

+0

@DigitalMD如果它是共享主機,那麼我懷疑他們會爲你做這件事(非常不可能),因爲它需要重新啓動Apache +這樣的日誌越來越快。並且我不確定它是否只能啓用1個特定的域... – LazyOne