我使用NodeJS构建了一个网站,并将Package.json中的主页定义为"https://www.example.com".在NPM运行Build之后,我将文件上传到公共文件夹,并使用以下代码创建了htaccess文件:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{HTTPS} off
  RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
  RewriteCond %{HTTPS} on
  RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteRule . /index.html [L]
</IfModule>

一旦我输入http或https://example.com,我就会被重定向至https://www.example.com,但无法访问该站点.如何通过保持来自http和非www URL的重定向工作来使其可达?

我try 删除了.htaccess中负责重定向的ReWriteConds和ReWriteRules,从而可以使用https://exapmple.com访问网站,但这不是我想要的结果.我还try 了许多不同的.htaccess代码变体,比如

RewriteCond %{HTTP_HOST} ^yourdomain.com [NC] 
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]

但这给我带来了同样的结果.我好像错过了什么.

推荐答案

"无法访问该站点"

如果无法访问该站点,则WWW子域(即,www.example.com主机名)不能解析.如果主机名不能解析,则请求甚至不会到达您的服务器.如果您不能直接请求www.example.com,那么在.htaccess中try 实现非WWW到WWW重定向是没有帮助的.

您需要:

  1. 配置将WWW子域指向域顶点的DNSCNAME记录.这告诉用户代理向何处发送对www子域的请求的IP地址.

  2. 配置服务器以接受对www子域的请求.例如,在您站点的v主机容器中的Apache中:

    ServerAlias www.example.com
    
  3. 还需要配置SSL/TLS安全证书以覆盖www子域.

  4. 在服务器配置(或.htaccess)中实现重定向,以将请求重定向到规范主机名.也就是说.https://www.example.com/(HTTPS+WWW).具体如何实现重定向的HTTP到HTTPS部分可能取决于您的服务器配置和管理SSL证书的方式.另外,您是否计划在将来实现HSTS(在这种情况下,您需要首先在同一主机名上从HTTP重定向到HTTPS).

    如果您没有实施HSTS,则可以执行以下操作:

    # Redirect non-www to www (+HTTPS)
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
    # Redirect remaining HTTP to HTTPS
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    但是,如果您要实现HSTS,则需要颠倒这两条规则.

Node.js相关问答推荐

MongoDB:更新批量操作中许多不能正常工作的内容

如何在RavenDB中执行JS索引?

为什么在导出的函数中调用node-sqlite3中的数据库方法时不起作用?

JsonwebToken过期后如何注销和清除cookie?

npm错误;无法解析依赖项:npm ERR!对等webpack@;5.x.x;来自@webpack-cli/serve@2.0.5";

验证器功能在mongoose 中不起作用

当 Got 包因错误 JSON 崩溃时如何获取响应文本?

几个 lambda 共有的函数

对 google api v3 的 Axios 请求返回加密(?)数据

Mocha调用所有it回调模拟(测试中间件)

如何在拦截器中发送不同的请求?

响应发送 200 而不是 403

解决并行保存到 mongodb

您如何写入 aws lambda 实例的文件系统?

在 Node.js 中的两个不同进程之间进行通信

node/express:使用 Forever 连续运行脚本时设置 NODE_ENV

有人在 NodeJS 中实现过 wiki 吗?

Node.js 连接仅适用于本地主机

Npm postinstall 仅用于开发

使用 Node-sass 缩小 CSS