2017-02-15 163 views
1

我有一個網站,我剛剛添加了SSL證書。我增加了以下爲.htaccess所有非HTTPS URL重定向到HTTPS版本:301重定向到HTTPS導致所有非主頁,非HTTPS頁面重定向到主頁

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://www.myurl.co.uk [R=301,L] 

我也希望現場的所有非www版本重定向到www版本,所以我增加了以下內容:

RewriteEngine On 
RewriteBase/
RewriteCond %{HTTP_HOST} ^myurl.co.uk 
RewriteRule ^(.*)$ https://www.myurl.co.uk/$1 [R=301,L] 

然後,爲了幫助搜索引擎優化,我打開了URL重寫(在Joomla,我正在使用),所以現在我的網址顯示爲https://www.myurl.co.uk/about而不是https://www.myurl.co.uk/index.php/about

但我注意到,當我點擊某個鏈接(例如Google)時,仍然使用舊的網址結構,它會始終將訪問者帶到主頁上,而不是他們點擊的頁面。因此,點擊www.myurl.co.uk/index.php/about的訪客應該被帶到https://www.myurl.co.uk/about,但他們直接被帶到https://www.myurl.co.uk(主頁)。

我嘗試添加了我的網站上的每一頁下面:

Redirect 301 /index.php/about https://www.myurl.co.uk/about 

...但是這並沒有解決問題。

我對.htaccess很不熟悉。我在哪裏錯了?

+1

將'RewriteRule ^(。*)$ https://www.myurl.co.uk [R = 301,L] '改爲'RewriteRule ^(。*)$ https://www.myurl .co.uk/$ 1 [R = 301,L]'就像第二條規則('$ 1'是關鍵)。然後閱讀這些如何工作。 :-) – ceejayoz

+0

並且不要忘記清除緩存!您很可能會顯示緩存的網址版本。 – Lag

+0

@ceejayoz完美的工作。非常感謝。 – hypnocyst

回答

1

爲了滿足所有3個條件,即(http -> https, non-www -> www, /index.php/ removal)你可以使用這個單一的規則,但確保該規則的所有其他規則之前被放置在頂部:

RewriteEngine On 
RewriteBase/

RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} !^www\. [NC,OR] 
RewriteCond %{REQUEST_URI} ^/index\.php/. [NC] 
RewriteRule ^(?:index\.php/)?(.*)$ https://www.myurl.co.uk/$1 [R=301,L,NE] 
  • 避免多次重定向規則會好不只是爲了SEO的目的,但也爲客戶體驗。
  • 在使用基於mod_rewrite的規則時,請勿使用RedirectRedirectMatch規則。
  • 確保在測試此更改時完全清除瀏覽器緩存。