我正在ubuntu 16.04中运行NodeJs应用程序,我希望请求http://
和http://www
重定向到https://www
。
我试图通过编辑/etc/apache2/sites-available/000-default.conf
来实现这一点:
<VirtualHost *:80>
ServerAdmin admin@example.net
ServerName www.example.net
ServerAlias example.net www.example.net
ErrorLog /var/log/apache2/mysite-error_log
TransferLog /var/log/apache2/mysite-access_log
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.example.net$ [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule (.+) http://www.example.net$1 [R=301,L]
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
注意:在example.net上,我正在写我的域。
答案 0 :(得分:0)
在VirtualHost中用于端口80
耦合点:
1)不需要第二个RewriteCond
,如果您进入VirtualHost,%{HTTP_HOST}
将始终设置为某项。
2)ServerAlias example.net www.example.net
。删除已经在ServerName
中设置的www.example.net。
3)为了帮助调试Apache,您可以放LogLevel debug
并重试。
4)您的RewriteRule (.+) http://www.example.net$1 [R=301,L]
实际上应该是
RewriteRule ^(.*)$ https://www.example.net$1 [R=301,L]
您的规则:
(.+)
:表示某个字符,从1到n次。您一无所有(例如http://www.example.com
,您的规则就永远不匹配。在将请求的域添加到https重定向之后,新规则将确保不存在任何内容。
在VirtualHost中用于端口443
在端口443中,流量已经是https,因此仅需添加“ www”:
RewriteCond %{HTTP_HOST} ^example.net$ [NC]
RewriteRule ^(.*)$ https://www.example.net$1 [R=301,L]
仅当请求的域为https://example.net
时,才会添加“ www”。