gpt4 book ai didi

.htaccess - 子域、丢失流量和 HTTPS 的动态 htaccess 处理

转载 作者:行者123 更新时间:2023-12-02 23:31:47 25 4
gpt4 key购买 nike

我对 .htaccess 和 RegEx 还很陌生,对此感到非常沮丧,但我可能过于复杂了。基本上:

  • HTTP_HOST 将是多个域之一,应按原样保留(包括子域),异常(exception) www. 应始终为 已删除
  • 只有 domain1 和“domain2”具有 SSL,因此应强制使用 HTTPS,但应强制使用任何其他 HTTP
  • 如果域名后的第一个子文件夹foo,则进行重写,使foo成为子域而不是子文件夹。
  • 之后,如果 foo. 是子域:
    • 保留可见 URL 中任何丢失/禁止的文件夹/文件(稍后处理)
    • 其中任何一个的实际页面位于 foo.*.com/index.php
  • foo 子域中的缺失/禁止页面仍应发送到根目录中的 \index.php,这我目前正在做:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ /index.php [last,nocase]

我的尝试:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^(.*)$ $1 [L]
RewriteCond %{HTTP_HOST} domain1\.ca [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L]
RewriteCond %{HTTP_HOST} !domain1\.ca [NC]
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [L]
RewriteCond %{REQUEST_URI} ^/foo.* [NC]
RewriteRule ^ %{REQUEST_SCHEME}://foo\.%{HTTP_HOST}%{REQUEST_URI} [L]
RewriteRule "^/foo/(.+)" "%{REQUEST_SCHEME}://foo.%{HTTP_HOST}/$1" [L,NS,QSA,R=301]

一些示例:

incoming url:                               should become:
http://www.domain1.com/foo/blah => https://foo.domain1.com/blah
https://example.com/foo/blah.html => http://foo.example.com/blah.html
http://www.domain1.com/foo/index.php/foo => https://foo.domain1.com/foo
https://example.com/blah/blah.html => http://example.com/blah/blah.html

我希望这是有道理的(我不知所措,迟到了!) - 谢谢!

最佳答案

这些规则是根据您的问题进行的顺序翻译

RewriteEngine On

# Remove www from domain, keep scheme (http or https)
RewriteCond %{HTTP_HOST}#%{HTTPS}s ^www\.([^#]+)#(?:off|on(s)) [NC]
RewriteRule ^ http%2://%1%{REQUEST_URI} [R=302,L]

# force https for {domain1,domain2}
RewriteCond %{HTTP_HOST} ^(?:domain1|domain2)\. [NC]
RewriteCond %{HTTPS} off [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

# force http for others
RewriteCond %{HTTP_HOST} !^(?:domain1|domain2)\. [NC]
RewriteCond %{HTTPS} on [NC]
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R=302,L]

# foo subfolder -> foo subdomain
RewriteCond %{HTTP_HOST} !^foo\. [NC]
RewriteCond %{REQUEST_URI}#%{HTTPS}s ^/foo/([^#]+)#(?:off|on(s)) [NC]
RewriteRule ^ http%2://foo.%{HTTP_HOST}/%1 [R=302,L]

# hide index.php for foo subdomain
RewriteCond %{HTTP_HOST} ^foo\. [NC]
RewriteRule ^index\.php(?:$|/(.*)) /$1 [R=302,L]

# (internal rewrite) foo subdomain -> foo's root index
RewriteCond %{HTTP_HOST} ^foo\. [NC]
RewriteCond %{REQUEST_URI} !^/foo/ [NC]
RewriteRule ^ /foo/index.php [L]

# default rule (root index)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /index.php [L]

这很丑,我同意。但这应该按您的预期工作。它已经在本地服务器上进行了测试,并且您展示的所有示例测试都刚刚通过。

注意:我特意使用了 302 重定向。当您一切正常后,只需切换回 301

关于.htaccess - 子域、丢失流量和 HTTPS 的动态 htaccess 处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58125316/

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