gpt4 book ai didi

.htaccess - htaccess 强制 ssl/https 和非 www,同时允许框架路由到/public

转载 作者:太空宇宙 更新时间:2023-11-03 14:32:20 25 4
gpt4 key购买 nike

目前我在根目录 (public_html) 中有一个 htaccess,它具有以下规则:

RewriteEngine on
RewriteRule ^(.*) public/$1 [L]

pubic_html/public 文件夹保存 Assets ,而 public_html/application 文件夹保存 MVC 项目。我目前正在使用这些规则强制 public_html/public 文件夹中的非 www

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

目前的设置有这个效果

http://www --> http://non-www
http://non-www --> http://non-www
https://www --> http://non-www
https://non-www -> https://non-www

这是强制执行非 www 的预期效果,但我也想强制执行 ssl/https。在public文件夹

中实现以下规则时
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

我最终得到以下结果

http://www --> https://non-www/public/
http://non-www --> https://non-www/public/
https://www --> https://non-www/public/
https://non-www -> https://non-www/public/

所以非 www 和 ssl/https 被强制执行,但现在所有的都将 public 文件夹放入 URL,这是不应该的,只是默默地创建一个 vhost 路由到它.

我尝试了这些规则的各种配置,在 public_html 文件夹、public 文件夹、不同的规则顺序等中,但没有任何东西给我想要的效果。

有人可以帮我弄清楚如何让所有这些规则很好地协同工作吗?谢谢!

最佳答案

经过反复试验,我设法找到了一种似乎有效的方法!我不知道这是否特定于我的设置,但希望这能帮助遇到类似问题的其他人。

我应用了以下一组规则将所有请求重定向到非 www 和 https 版本的 url。访问者将永远结束 https://example.com ,无论是否键入了 http、https、非 www、www 或其任意组合。

RewriteEngine on
# Redirect all www to https://non-www
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# Redirect http to https
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

拥有http://wwwhttps://non-www就像在重写规则上添加“s”一样简单,这避免了第一次转到 http://non-www 的双跳然后被告知访问https://non-www反而。 https://www也被匹配并被告知跳转到https://non-www , 这样就涵盖了 http/s + www 突变。

似乎对我的设置有效的唯一 https 检查规则是使用 %{ENV:HTTPS} 因为 %{HTTPS}%{SERVER_PORT } 80 没有工作,我最终遇到来自浏览器的“无效重定向”或“太多重定向”错误。

我的设置(有另一个 htaccess 规则将请求重定向到 public 文件夹)也需要在最后使用 https://%{HTTP_HOST}/$1规则行。大多数建议是使用 https://%{HTTP_HOST}%{REQUEST_URI} 但在我的例子中 %{REQUEST_URI} 包括 public文件夹,它不应该。所以使用 $1 给它提供了已经重写的 url,而不是服务器看到的实际请求。

我现在有以下结果:

http://www --> https://non-www (uses www to non-www rules)
http://non-www --> https://non-www (uses http to https rules)
https://www --> https://non-www (uses www to non-www rules)
https://non-www -> https://non-www (does not redirect)

关于.htaccess - htaccess 强制 ssl/https 和非 www,同时允许框架路由到/public,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51597054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com