htaccess - 将子域名与子文件夹进行通配符转换

htaccess - 将子域名与子文件夹进行通配符转换

所以我的想法是:

domain.com/.subdomains/domain1 (2,3,4,etc)

我想要映射:

domain1.domain.com -> domain.com/.subdomains/domain1/
domain2.domain.com -> domain.com/.subdomains/domain2/

但我希望它忽略“www”

我通过以下方式成功完成了这项工作:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com [NC]
RewriteRule ^(.*)$ http://domain.com/.subdomains/%1/$1 [NC,QSA,L,P]

存在两个问题:

1)它不是忽略“www”

2)当我访问 URL 时:

http://domain3.domain.com/deep/subfolder/here/index.html

它将我重定向到:

http://domain.com/.subdomains/domain3/deep/subfolder/here/index.html

我一直在尝试寻找答案,但找不到遇到此问题的人。有什么想法吗?

谢谢!

编辑:

好的,似乎我不能使用 http,但如果我改变

RewriteRule ^(.*)$ http://domain.com/.subdomains/%1/$1 [NC,QSA,L,P]

RewriteRule ^(.*)$ /.subdomains/%1/$1 [NC,QSA,L,P]

它进入一个奇怪的重定向循环

答案1

我让它与此一起工作:

RewriteEngine on

RewriteBase /

# MAGIC
RewriteCond $1 !/$
RewriteCond $1 !\.
RewriteRule ^(.+)$ /$1/ [R=301,L]
# //MAGIC

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([a-z0-9][-a-z0-9]+)\.domain\.com
RewriteCond %{REQUEST_URI} !^/.subdomains/
RewriteRule ^(.*)$ /.subdomains/%1/$1 [L]

我基本理解其余的代码,除了那个神奇的部分——它以某种方式修复了这个错误:

http://domain3.domain.com/deep/subfolder/here/index.html

http://domain.com/.subdomains/domain3/deep/subfolder/here/index.html

现在这种情况不会发生,这要归功于魔法......我希望我知道它为什么有效。

相关内容