当我键入http://mywebsite.com时,服务器成功重定向到http://www.mywebsite.com,但是当我键入http://mywebsite.com/page.php时,服务器重定向到http://www.mywebsite.com而不是http://www.mywebsite.com/page.php。
我的服务器是Apache,我使用这些行将.htaccess中的非www重定向到www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(.*)\.mywebsite\.com$ [NC]
RewriteRule ^(.*)$ https://www.mywebsite.com/$1 [R=301,L]
谢谢
答案 0 :(得分:2)
我建议以下内容:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^mywebsite\.com [NC]
RewriteRule ^(.*)$ https://www.mywebsite.com/$1 [R=301,L]
我认为您的条件太严格了。您太早结束了($
)。
答案 1 :(得分:1)
如果您不希望在网址的开头添加www
,我宁愿使用它:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
答案 2 :(得分:1)
像这样尝试:
# Redirect non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
或重定向ot HTTPS:
# HTTP OVER SSL
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
答案 3 :(得分:1)
我不建议将用户重定向到.htaccess中的。对于可能来自非http端口(例如80)的访问者,您应该在虚拟主机的配置文件中执行此操作(如果可能),请使用临时重定向,或者在适当情况下使用永久重定向。
它可能看起来像这样:
<VirtualHost *:80>
ServerName mywebsite.com
ServerAlias www.mywebsite.com
DocumentRoot "/var/www/mywebsite.com"
Redirect / https://www.mywebsite.com/
</VirtualHost>
<VirtualHost *:443>
ServerName mywebsite.com
DocumentRoot "/var/www/mywebsite.com"
Redirect / https://www.mywebsite.com/
... SSL stuff
.... your https config for mywebsite here, with SSLCertificate, I believe you need a separate one for without www, to redirect to www.
</VirtualHost>
<VirtualHost *:443>
ServerName www.mywebsite.com
DocumentRoot "/var/www/mywebsite.com"
SSL STUFF****
</VirtualHost>
然后在.htaccess中,您根本不需要任何重写。
我认为其他答案的问题是,您正在重写文件的位置,而该文件的格式应为%{DOCUMENT_ROOT}%{REQUEST_URI},因此您可能有一个错误处理程序将您退回到主页。因此,请检查您的错误日志和访问日志。