2016-09-21 93 views
1

我有點奇怪的問題。我的重寫規則看起來像我所期望的那樣工作,但不適用於子頁面。強制無WWW和HTTPS

www沒有www總是有效,但強制https在某些頁面上不起作用。

但是,所有規則都可以在主頁上運行,所以這一切都很好。

<IfModule mod_rewrite.c> 
# Wordpress related rewrite. 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

# www and https rules. 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] 
RewriteRule ^(.*)$ https://%1/$1 [R=301,L] 
</IfModule> 

結果:

  1. http://example.com - >https://example.com(好)
  2. http://www.example.com - >https://example.com(好)
  3. https://example.com - >https://example.com(好)
  4. https://www.example.com - >https://example.com(好)

然而,子頁面不顯示一切正常:

  1. https://example.com/page - >https://example.com/page(好)
  2. https://www.example.com/page - >https://example.com/page(好)
  3. http://example.com/page - >http://example.com/page(壞)
  4. http://www.example.com/page - >http://example.com/page(壞)

任何想法如何我可以改善這種重寫工作與www和https無論我的位置?

感謝

回答

2

更換你的規則:

RewriteEngine On 
RewriteBase/

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

RewriteRule ^index\.php$ - [L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php [L] 

排序很重要,因此您必須在WP默認規則之前保留重定向規則。測試此更改時,請確保清除瀏覽器緩存。

+1

哇,這真的有效。非常感謝。 –

1

在你www and https rules.塊重定向到HTTP:

RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

正如你希望始終重定向到HTTPS,使其重定向到HTTPS以及:

RewriteRule ^(.*)$ https://%1/$1 [R=301,L]