我希望有.htaccess
代码,添加https
和www
到我的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]
1条答案
按热度按时间ukqbszuj1#
将代码与其他代码进行比较,是否应该是以下代码?
是的,我知道
您的原始规则明确地 * 移除 * 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(临时)重定向以避免潜在的缓存问题。在测试之前,您需要清除浏览器缓存,因为错误的重定向将被浏览器缓存。
检查端口号在这里似乎是不必要的。如果您在标准端口(80或443)上使用
localhost
,这将失败,因为端口号将从Host
头中省略。类似!^localhost
的内容就足够了,或者如果您碰巧使用以localhost
开头的域名,可能是!^localhost($|:)
!