我在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