2017-08-02 116 views
1

我一直在試圖找到一種方法來保留我的域和子域上的https://,同時從URL中刪除www.https://保留域名和子域,但刪除www

例子:

URL 1: http://www.mywebsite.co.uk 
Redirect 1: https://mywebsite.co.uk 

URL 2: http://test.mywebsite.co.uk 
Redirect 2: https://test.mywebsite.co.uk 

URL 3: http://mywebsite.co.uk 
Redirect 3: https://mywebsite.co.uk 

URL 4: http://www.test.mywebsite.co.uk 
Redirect 4: https://test.mywebsite.co.uk 

我也碰到過多次嘗試,試圖打擊堆棧溢出這個問題,並收到打擾Apache和PHP腳本到我的網站來解決,但他們似乎總是要來還有其他問題。

當前.htaccess文件:

RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteCond %{HTTP_HOST} ^(.+\.)?mywebsite\.co\.uk$ 
RewriteRule ^(.*)$ https://%1mywebsite.co.uk/$1 [R,L] 

雖然這是幫助我的保留在我的子域SSL,我仍然可以通過在URL前面加上www.訪問我的主域和子域。這不是我想要的效果。

回答

1

您可以使用此單一的規則:

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^www\. [NC,OR] 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC] 
RewriteRule^https://%1%{REQUEST_URI} [R=301,L,NE] 

記住測試這種變化之前,清除瀏覽器緩存。

+0

這仍然允許www。並且因爲我現在重寫了上面的規則,現在它將www.mywebsite.com/dashboard/重定向到https://mywebsite.com/index.php?page=dashboard,它使用AngularJS崩潰了我的單頁應用程序。 –

+0

這必須作爲'RewriteEngine'行下面的第一條規則放置,並且您必須清除瀏覽器緩存。還要確保沒有其他規則/代碼在子域上強制使用「www」。 – anubhava