如何将 React 应用程序重定向到非 www HTTPS?



我正在编写一个部署在Web服务器上的React应用程序。我有以下.htaccess文件,它通过索引文件服务器所有请求,因为我使用的是客户端路由:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]

哪个有效。

但是,我想将所有流量重定向到HTTPS非www。有人可以使用标准 .htaccess 文件指导我正确的方向,但通过 index.html:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteCond %{HTTP_HOST} ^(?:www.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

最容易分解你已经拥有的东西(相反)

RewriteEngine On
RewriteCond %{HTTPS} off [OR]

当请求未通过 https 完成时匹配...很简单。末尾的 [OR] 表示此规则或其下方的规则必须返回 true。

RewriteCond %{HTTP_HOST} !^www. [NC]

如果请求开头没有"www."(^表示开始,!表示"not"),则匹配。[NC]的意思是"没有案例",所以基本上只是忽略了这个案例。在 Linux 服务器上不是必需的,但仍建议使用。

RewriteCond %{HTTP_HOST} ^(?:www.)?(.+)$ [NC]

因此,一旦HTTPS关闭或字符串不以www.开头,HTTP_HOST就会传递到此规则中。此规则将始终返回 true,因为正则表达式与可选的"www"匹配。(因为?在括号之后),那么一个或多个和字符(.+)直到字符串的末尾($)。

可选www.后面的.+部分被包裹在括号中以捕获它((?:在它表示非捕获组之前,因此主机名的其余部分被捕获为%1- 或第一个捕获的组)。

RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

然后,这将重写请求,以包括https://www.加上主机名的其余部分$1,然后是REQUEST_URI,这是 URI 中第一个/中的所有内容。

规则末尾的位也非常简单,L表示这是最后一个重写规则,NE表示noescape- 这在包含request_uri以防止其被转义时很有用。R=301表示以 301 状态重定向。


TLDR - 您的解决方案

因此,要创建需要删除 www. 的规则,您应该翻转其中几个选项:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www. [NC]
RewriteCond %{HTTP_HOST} ^(?:www.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

在第二个RewriteCond,我们删除!以使其匹配 以www.开头的 url ,然后在RewriteRule我们删除 www。 正在添加

最新更新