我是一個真正的初學者在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]
注:我只是試圖訪問whatismyreferer.com從鏈接裏面的帖子,它說「沒有推薦人」。所以http_referer將不起作用。但是,那麼該怎麼做呢? – user1929668
有趣的人在這裏是「主持人」。 「關閉作爲offtopic」儘管事實上,我已經閱讀了至少3幾十個關於mod_rewrite一個htaccess和ssl的問題。由offtopic某人可能meand「太普通」......很抱歉,我是一個初學者,我不能問布爾型問題「這是這個或這是正確的語法」。感謝Jon Lin儘管被關閉回答問題!要知道我的請求是不可能的,這仍然是一個有用的信息,至少我不會再嘗試使用這種方法。 – user1929668