0

我都试过了!

这个:

RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^.*$ https://%1/$1 [R=301,L]

仅当我不将 http 放在开头时才有效

如何使它工作:如果有 http 重定向到 https 如果有 www 重定向到非 www,当然两者同时

http://www.domain.com -> https://domain.com
www.domain.com --> https://domain.com
http://domain.com --> https://domain.com

和查询后的每个子文件夹!

4

1 回答 1

2

我想你也想要

https://www.domain.com -> https://domain.com

你有没有得到这个工作?我无法让测试 https 站点仔细检查这一点。

与此同时,我确实看到了一些东西,所以试试这个(假设 isapi_rewrite v3,看起来你正在使用它):

RewriteCond %{HTTP_HOST} ^www\.(.*)
RewriteRule ^(.*)$ https://%1$1 [NC,R=301]

这将括号添加到 RewriteRule 以捕获 $1 的 url。

然后不需要 %1$1 之间的斜线,因为在 $1 捕获的开头有一个。

我喜欢使用 NC 来表示不区分大小写,而 R 规则是最终规则,所以最后不需要 L。

编辑

我重新访问了这个答案,以更新/澄清我上面原始答案中的几个次要问题。这些不会改变上面的主要解决方案,即添加括号来进行捕获。

原来的:

然后不需要 %1$1 之间的斜线,因为在 $1 捕获的开头有一个。

这实际上取决于规则在哪里,以及是否有RewriteBase声明。常见的共享主机配置在规则中没有前导斜杠,因此需要斜杠。如果你不确定,你可以试试有无。

原来的:

我喜欢使用 NC 来表示不区分大小写,而 R 规则是最终规则,所以最后不需要 L。

事实证明,将 L 和 R 结合起来对性能很有用,因为[NC,R=301,L]. 实际上,在这个问题之前一年,我曾在 Helicon Tech 提出过这个问题,但忘记了:
http
://www.helicontech.com/forum/14826-Does_Redirect_need_Last.html 从他们的回复中:

...我们在 301 重定向规则中使用 [L] 的原因是重定向不会立即发生。即使规则匹配,也会处理(运行)进一步的规则,除非您有 [L]....

于 2011-07-24T01:55:54.863 回答