node.js - 在 Apache 服务器上首选使用 Node.js 的 'www' 子域

标签 node.js apache .htaccess

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

相关文章:

html - 如何从友好 URL - Modx 中删除 .html?

php - 如何使用 php 处理 htaccess 错误?

javascript - 本地开发时浏览器如何解析我的react代码?

javascript - 如何路由用户并将参数保留在 URL 中

javascript - 等待 Promise 在 emitter.on 监听器函数中解析

html - 框架 .htaccess 时显示消息

apache - .htaccess 存在斜线问题

php - htaccess 创建集中的 php 文件

javascript - 隐藏一个元素和它的空间并通知应用程序以便它使用 React 显示其他内容

apache - mod_rewrite 在子目录中