2010-09-03 13 views
7

我需要幫助在.htaccess中進行url重寫。在.htaccess中對不同協議的URL重寫

所以這個問題是關於不同的協議:https和http。重寫的主要目的是從URL中刪除「www」,但協議應該保持原來的狀態。

例如,當我有喜歡的網址HTTP ://www.domain.com/request,它應該被重定向到HTTP://domain.com/request。我用這些規則解決它:

RewriteBase/
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

但在情況下,當URL看起來像HTTPS://www.domain.com/request它應該被重定向到HTTPS://domain.com/請求。

不幸的是,無論目前的協議如何,上述規則都會重定向到http

在此先感謝。

+0

可能重複[htaccess的重定向非www HTTP和HTTPS(http://stackoverflow.com/questions/2015159/htaccess-redirect-for-non -www-both-http-and-https) – 2010-09-03 08:38:44

+0

謝謝你的鏈接。我在搜索過程中錯過了這個問題。不幸的是,這種情況不起作用。它將https:// domain.com/request重定向到http:// www.domain.com/request,而不是https:// www.domain.com/request。 – Alex 2010-09-03 09:18:58

回答

8

這與鏈接的可能重複非常相似,但是由於那個強制www要刪除它,它可能需要單獨的答案。

嘗試這樣:

RewriteCond %{HTTP_HOST} ^www\. 
RewriteCond %{HTTPS}s ^on(s)|off 
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)?(.+)$ 
RewriteRule^%1%3%{REQUEST_URI} [R=301,L] 
+2

這些規則的解釋對於尋找www到非www重定向的人來說,肯定會非常有用。 – 2013-03-06 16:15:50

+0

認真,apache API的創造者...爲什麼不只是像'HTTP_PROTOCOL'這樣的變量,並且第二個參數跟所有其他的一樣遵循相同的模式? 'RewriteCond%{HTTP_PROTOCOL}^http $'或'RewriteCond%{HTTP_PROTOCOL}^https $''而不是規則的例外情況?較少的知識要求更好。額外的知識是好的,但額外需要的知識是不好的。而且你必須知道確切的語法和價值。誰會在(s)| off'上猜測'^'。 Freaken舊的PHP相關工具... – ahnbizcad 2016-09-12 21:01:53