我在 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
的内容,除非未指定主机(以避免在提供没有主机 header 的请求时出现循环) ,到 www.example.com
。
通过这种方式,如果您添加适当的 ServerAlias(可能是 *.example.com)和 DNS 条目,它也可以处理拼写错误,例如 ww.example.com
(缺少 w) (同样可以使用通配符)并且还涵盖您所要求的内容,您不必这样做。
它还保留了 URL 的其余部分,因此:
http://example.com/testing
将重定向到:
http://www.example.com/testing
关于node.js - 在 Apache 服务器上首选使用 Node.js 的 'www' 子域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41336726/