2012-12-26 84 views
-1

我是一個真正的初學者在htaccess,Apache和正則表達式,所以如果我問愚蠢的問題,請原諒我。htaccess基於當前URL或引用來重寫內部鏈接

這裏是我的情況:

我有一個論壇,允許訪問optionaly用戶對

http://mysite.net or 
https://mysite.net. 

的想法是,它是一個廉價的共享主機的一個業餘愛好項目自簽名證書,所以我真的只需要https主持人 - 普通用戶,客人,搜索引擎應該使用HTTP。

論壇軟件似乎對相關鏈接有點無知,並始終爲內部頁面創建絕對鏈接。因此,如果使用論壇帖子的內部鏈接到另一個話題的HTTP版本的用戶,這將是

http://mysite.net/topic.... 

如果用戶使用HTTPS版本的職位的內部鏈接它會 https://開頭.....

問題:

如果從HTTP版本的用戶點擊鏈接HTTPS,他被重定向到HTTPS網站,這是不可取的,因爲對於自簽名證書的警告從瀏覽器用戶的恐慌。如果主持人形成HTTPS版本點擊HTTP鏈接,則會更糟糕,因爲他會取消記錄(我使用安全會話Cookie並在該場景中斷開會話!)。

的soluton:

我在想htaccess的重寫規則,像「如果引用包含

https://mysite... 

和請求的URL具有

http://mysite.net/something 

重寫它是

https://mysite.net/something". 

反之亦然。

但我真的不明白apache mod_rewrite和正則表達式不知道該怎麼做。在Stackoverflow上搜索了很多教程和幾個問題,但無法修改示例。我得到的唯一結果是沒有/無條件的重定向/無限循環。

這裏有一對夫婦試圖規則,只是不爲我工作:

RewriteEngine on 
RewriteCond %{HTTP_REFERER} ^https://mysite\.net [NC] 
RewriteCond %{REQUEST_URI} ^http://mysite\.net [NC] 
RewriteRule ^(.*)$ https://mysite.net/$1 [R=301,NC,L] 

RewriteEngine On 
RewriteCond %{HTTPS} !=on 
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L] 
+0

注:我只是試圖訪問whatismyreferer.com從鏈接裏面的帖子,它說「沒有推薦人」。所以http_referer將不起作用。但是,那麼該怎麼做呢? – user1929668

+0

有趣的人在這裏是「主持人」。 「關閉作爲offtopic」儘管事實上,我已經閱讀了至少3幾十個關於mod_rewrite一個htaccess和ssl的問題。由offtopic某人可能meand「太普通」......很抱歉,我是一個初學者,我不能問布爾型問題「這是這個或這是正確的語法」。感謝Jon Lin儘管被關閉回答問題!要知道我的請求是不可能的,這仍然是一個有用的信息,至少我不會再嘗試使用這種方法。 – user1929668

回答

0

沒有對這個mod_rewrite的解決方案,因爲通過的時間重寫規則得到執行,請求已經完成,並且已經發生了任何不良的副作用。在檢查用戶是否點擊https鏈接時,已經發生錯誤的證書警告,因爲證書在發出請求之前被髮送,甚至在請求之前發送。當主持人點擊非https鏈接時,請求已經完成,cookie不發送,主持人被註銷。儘管安全Cookie可能不會被HTTP請求覆蓋,當主持人切換回HTTPS時,舊的會話cookie仍會保留。

修復真的需要需要到您的論壇軟件。 https://mysite.net部分只需要刪除,一切都會工作。

+0

非常感謝。另一個可能的解決方法是使用不安全的cookie,然後一切正常,或者購買經過驗證的證書,並強制SSL上的所有內容與上面的重寫,但我現在不想訴諸於此。其實我也嘗試修補PHPBB 3.0.11的「魔法網址」的PHP,但似乎在編輯帖子時發生了另一個錯誤(鏈接以錯誤的方式重新解析)。 – user1929668