gpt4 book ai didi

.htaccess - 在 .htaccess 重定向中保留 HTTP/HTTPS 协议(protocol)

转载 作者:行者123 更新时间:2023-12-03 08:59:10 26 4
gpt4 key购买 nike

我必须在 htaccess 中将端口 80 重定向到 2368,但我想保持请求的协议(protocol)完好无损,这样 SSL 就不会中断。

我目前有这个:

RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
RewriteRule ^ http://sub.domain.com:2368%{REQUEST_URI} [P,QSA,L]

它可以正常工作,但如果可能的话,我希望从 %{HTTP_HOST} 条件中获取协议(protocol)。

有没有办法在没有硬编码域和协议(protocol)的情况下让它变得更加动态?

它看起来很慢。

最佳答案

Jon 提供的技巧是一个不错的 hack,但如果您想使用更多 [OR],我担心它可能会崩溃条件,如果你使用更多的反向引用,你必须小心使用哪个数字(%1%2 或 ..)。

我认为 smart HTTP/HTTPS handling 最优雅、最强大和最干净的解决方案是设置一个变量:

# initialization code - put only once at the beginning of .htaccess
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=proto:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=proto:http]

# simply use %{ENV:proto} in your rules:
RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
RewriteRule ^ %{ENV:proto}://sub.domain.com:2368%{REQUEST_URI} [P,QSA,L]

优点还在于初始化代码只需要运行一次,所以如果你有更多的重写规则,那么生成的代码会更短更优雅。

请注意,常见的设置是 cloudflare 提供的 https,在这种情况下 HTTPS 在服务器本身上不是“开启”的。在这种情况下,您需要额外的规则,例如(注意顺序):
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=proto:http]
RewriteCond %{HTTP:CF-Visitor} '"scheme":"https"' [OR]
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=proto:https]

关于.htaccess - 在 .htaccess 重定向中保留 HTTP/HTTPS 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19372594/

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