.htaccess 动态域重定向到HTTPS和非www

fjnneemd  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(160)

目前我有两个领域:example.pl和示例网站。
我试图确保它们都分别转到https://example.plhttp://example.com,但我遇到了一个问题(或者我的浏览器还记得旧状态)。
我有这个代码的时刻:

RewriteCond %{ENV:HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^example.pl [NC]
RewriteRule ^ https://example.pl%{REQUEST_URI} [L,NE,R=301]

RewriteCond %{ENV:HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301]

但我不确定它是否工作正常(http://example.com不知何故重定向到https://example.pl),也不确定这是否可以在一个代码块中完成?

6ju8rftf

6ju8rftf1#

RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^example.com [NC]

这两种情况都不可能成功,因此如果通过HTTPS请求www子域,规则最终将失败(不执行任何操作)。
如果只有两个域,那么您需要修改第三个条件以允许可选的www子域,并使用regex * alternate * 匹配这两个域。
例如:

RewriteCond %{ENV:HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(example\.com|example\.pl) [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

%1反向引用匹配最后匹配的RewriteCond指令中捕获的子模式,即example.comexample.pl。重要的是第三个条件总是成功的,因为第三个条件的唯一目的是捕获域名。
您需要清除浏览器缓存,因为任何(错误的)301(永久的)重定向都将被浏览器缓存。
但我不确定它是否工作正常(http://example.com不知何故重定向到https://example.pl),也不确定这是否可以在一个代码块中完成?
这是不可能的规则,你已经张贴。这是可能的,你看到的缓存重定向从一个较早的(错误的)* 301永久 * 重定向。
有关 * 任意域 * 解决方案,请参见my earlier answer

相关问题