.htaccess htaccess打开https和www,但仅在实时时打开,不在本地打开

tv6aics1  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(92)

我希望有.htaccess代码,添加httpswww到我的URL-但只有当我的网站是活的,而不是当我在我的计算机上本地开发。
我有以下

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

但是,当我的网站运行时,这似乎没有添加www。因此,例如https://example.com没有www,所有链接都断开。例如,https://example.com/about只是得到一个404 Not Found错误信息。
谢谢你的帮助。我不懂.htaccess文件/代码。
编辑/更新
将代码与其他代码进行比较,是否应该是以下代码?

RewriteCond %{HTTP_HOST} !^localhost(?::\d+)?$ [NC]
RewriteCond %{HTTP_HOST} !^www\. [NC,OR]
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L,NE]
ukqbszuj

ukqbszuj1#

将代码与其他代码进行比较,是否应该是以下代码?

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

是的,我知道
您的原始规则明确地 * 移除 * www子网域。如果您要求http://www.example.com/(注意HTTP),您会被重新导向到https://example.com/(HTTPS + non-www)。但是如果要求https://www.example.com/-标准URL,则不会有任何React(因为第二个和第三个 * 条件 * 失败,所以略过此规则)。
%1反向引用包含前面的 CondPattern 中第一个捕获组的匹配项。例如,给定 CondPattern^(?:www\.)?(.+)$,则%1包含(.+)(第一个 * 捕获 * 组)匹配的任何内容,即主机名减去可选的www.前缀。
测试%{HTTPS} off%{HTTPS} !on之间没有差异-结果相同。
首先测试302(临时)重定向以避免潜在的缓存问题。在测试之前,您需要清除浏览器缓存,因为错误的重定向将被浏览器缓存。

RewriteCond %{HTTP_HOST} !^localhost(?::\d+)?$ [NC]

检查端口号在这里似乎是不必要的。如果您在标准端口(80或443)上使用localhost,这将失败,因为端口号将从Host头中省略。类似!^localhost的内容就足够了,或者如果您碰巧使用以localhost开头的域名,可能是!^localhost($|:)

相关问题