2017-02-15 131 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规则。
  • 确保在测试此更改时完全清除浏览器缓存。