我有一个网站,我刚刚添加了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非常缺乏经验。我在哪里错了?
答案 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]
Redirect
的规则时,请勿使用RedirectMatch
或mod_rewrite
规则。