301重定向到HTTPS,导致所有非主页,非HTTPS页面重定向到主页

时间:2017-02-15 15:11:51

标签: apache .htaccess redirect mod-rewrite http-status-code-301

我有一个网站,我刚刚添加了SSL证书。我将以下内容添加到.htaccess中,以将所有非HTTPS URL重定向到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]

然后,为了帮助SEO,我开启了网址重写(在Joomla,我正在使用),所以现在我的网址显示为https://www.myurl.co.uk/about而不是https://www.myurl.co.uk/index.php/about

但是我注意到,当点击我的网站链接(例如来自谷歌)时仍然使用旧的网址结构时,访问者总是会将访问者带到主页而不是他们点击的网页。因此,点击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 个答案:

答案 0 :(得分: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目的,也适用于客户体验。
  • 使用基于Redirect的规则时,请勿使用RedirectMatchmod_rewrite规则。
  • 确保在测试此更改时完全清除浏览器缓存。