2011-02-22 140 views
2

有大量的资源在线使用.htaccess重写你的子域,如果需要的话,也可以将你的主域重写到子文件夹。我找到了很多答案,其中大部分都完全一样。我一直在繁琐地测试这些方法,并且在所有情况下都有同样的问题。.htaccess重写到子文件夹的子域和主域

考虑通缉的结果:
maindomain.com:重写/的public_html/mainsite/
sub.maindomain.com:重写/的public_html /子/

最快/最彻底的方法我已经考虑如下:

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

你有没有想出一个很好的解决这个? – Mike 2012-11-22 18:47:53

回答

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)内匹配任何文件。我想你会需要对子域也做同样的事情。

+0

!^/mainsite /.*我和!^/mainsite /(贪婪正则表达式)是一样的。您还需要在“sub.maindomain.com”中转义点,否则subbmaindomain.com会匹配,甚至subbmaindomainccom.org甚至subbmaindomainccom.maindomain.com ;-)无论如何,我仍然在思考最优雅的解决方案。 – Capsule 2011-02-22 22:01:12

+0

的确如此,你确实需要避开这些点。不知道贪婪的正则表达式,认为你需要。* – RedSoxFan 2011-02-22 22:10:35

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