网上有大量关于使用.htaccess重写子域的资源,如果需要,还可以将主域重写为子文件夹。我找到了很多答案,其中大部分答案都是一样的。我一直在繁琐地测试这些方法,并且在所有情况下我都遇到同样的问题。
考虑想要的结果:
maindomain.com :重写为/ public_html / mainsite /
sub.maindomain.com :重写为/ public_html / sub /
我考虑过的最快/最干净的方法如下:
RewriteEngine On
# Rewrite the main domain
RewriteCond %{HTTP_HOST} !sub.maindomain.com
RewriteCond %{REQUEST_URI} !^/mainsite
RewriteRule ^(.*)$ /mainsite/$1 [L]
# Rewrite the sub domain
RewriteCond %{HTTP_HOST} sub.maindomain.com
RewriteCond %{REQUEST_URI} !^/sub
RewriteRule ^(.*)$ /sub/$1 [L]
除了1个恼人的问题外,这种方法效果很好;这条线
RewriteCond %{REQUEST_URI} !^/mainsite
基本上可以防止重写循环,但是如果你浏览到maindomain.com/mainsite/它会重写为/ public_html / mainsite /而不是/ public_html / mainsite / mainsite /希望引发404找不到。如果我删除该行,我进入循环时会收到500服务器错误:S
问题是,这些域中的任何一个都需要创建文件夹等的自由,并且希望确保人们创建的子子文件夹中有绝对的自由:S
请有人帮忙吗?
答案 0 :(得分:0)
RewriteEngine On
# Rewrite the main domain
RewriteCond %{HTTP_HOST} !sub.maindomain.com
RewriteCond %{REQUEST_URI} !^/mainsite/.*
RewriteRule ^(.*)$ /mainsite/$1 [L]
# Rewrite the sub domain
RewriteCond %{HTTP_HOST} sub.maindomain.com
RewriteCond %{REQUEST_URI} !^/sub/.*
RewriteRule ^(.*)$ /sub/$1 [L]
您需要将其设置为与/ mainsite目录中的任何文件不匹配,而不仅仅是根(/ mainsite)。我认为你也需要对子域做同样的事情。
答案 1 :(得分:0)
如果您仍在寻找答案,请务必尝试此操作
RewriteEngine On
# Rewrite the main domain
RewriteCond %{HTTP_HOST} !sub.maindomain.com
RewriteCond %{REQUEST_URI} !^/mainsite/.*
RewriteRule ^/mainsite/(.*)$ /mainsite/$1 [L]
# Rewrite the sub domain
RewriteCond %{HTTP_HOST} sub.maindomain.com
RewriteCond %{REQUEST_URI} !^/sub/.*
RewriteRule ^/sub/(.*)$ /sub/$1 [L]`