非www到https:// www

时间:2018-10-13 14:54:06

标签: node.js apache ubuntu apache2

我正在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上,我正在写我的域。

1 个答案:

答案 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. 重定向到http。
  2. (.+):表示某个字符,从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”。