首选'www' Apache 服务器上带有 Node.js 的子域



我在Apache服务器上有一个Node.js应用程序(托管其他非node.js站点)。以下是 Apache 设置,用于将 www.mysite.com 上的所有流量发送到端口 12001 上的 Node:

<VirtualHost *:80>
ServerAdmin contact@mysite.com
ServerName  www.mysite.com
ServerAlias mysite.com www.mysite.com
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
<Location />
ProxyPass http://localhost:12001/
ProxyPassReverse http://localhost:12001/
</Location>
ErrorLog /var/log/apache2/mysite-error_log
TransferLog /var/log/apache2/mysite-access_log
</VirtualHost>

我想强迫所有访问 mysite.com 的人都被重定向到 www.mysite.com

在 Node 中,我无法检查req.headers.host因为它总是等于localhost:12001并且我不确定我应该将任何.htaccess文件放在哪里。

只需在您的服务器配置中执行此操作,不需要 .htaccess。添加这个:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.example.com$ [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule (.+) http://www.example.com$1 [R=301,L]

(我不得不使用标准example.com而不是您的示例域,因为系统拒绝了它)

这表示将不使用主机www.example.com的任何内容重定向到www.example.com

这样做是为了处理拼写错误,例如ww.example.com(缺少w),如果您添加适当的ServerAlias(也许是*.example.com)和DNS条目(再次可以使用通配符),并且还涵盖了您要求的内容,您不必这样做。

它还保留 URL 的其余部分,因此:

http://example.com/testing

将重定向至:

http://www.example.com/testing

最新更新