【发布时间】:2020-02-03 23:15:06
【问题描述】:
我有:
目录树:
└───domains
├───bar.com
│ ├───sub (sub.bar.com / www.sub.bar.com)
│ ├───sub2 (sub2.bar.com / www.sub2.bar.com)
│ └───www (bar.com / www.bar.com)
└───foo.com
├───sub (sub.foo.com / www.sub.foo.com)
├───sub2 (sub2.foo.com / www.sub2.foo.com)
└───www (foo.com / www.foo.com)
/.htaccess
RewriteEngine On
# remove www from URL
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,DPI,L,NC]
# subdomains (sub.foo.com, sub.bar.com, sub2.foo.com, sub2.bar.com)
RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^([^\.]*)\.([^\.]*\.[^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteCond %{DOCUMENT_ROOT}/domains/%2/%1 -d
RewriteRule (.*) /domains/%2/%1/$1 [DPI]
# main domains (foo.com, bar.com)
RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^([^\.]*\.[^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%1 -d
RewriteRule (.*) /domains/%1/www/$1 [DPI]
这看起来效果很好,但是当我需要在foo.com 上启用 https 时,就无法按预期工作了。
/domains/foo.com/.htaccess
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [DPI,R=301]
因为不是重定向:http://www.sub.foo.com/?query > https://sub.foo.com/?query 它重定向到:https://sub.foo.com/domains/foo.com/sub/?query,但这确实不是我所期望的。
【问题讨论】:
标签: regex apache .htaccess mod-rewrite http-redirect