.htaccess重写到子域和主域的子文件夹

时间:2011-02-22 21:32:13

标签: .htaccess mod-rewrite subdomain

网上有大量关于使用.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

请有人帮忙吗?

2 个答案:

答案 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]`