2011-09-14 81 views
2

我有一个标准灯的设置,我试图让子域,只要适当命名的文件夹中存在自动工作。转发子域到子文件夹和子文件夹中保存的.htaccess mod_rewrite的规则

如果你熟悉MEDIATEMPLE的GridServer共享托管服务,我试图模仿它的方式处理通配符子域:

  • 如果subdomain.domain.com要求,查找一个文件夹命名的子域.domain.com
    • 如果发现该文件夹,家称它为和服务于网站的这里面,服从任何.htaccess文件,可能是在那里。
    • 如果没有找到文件夹,只显示domain.com

我已经告诉mod_rewrite的的.htaccess在我的根域是要走的路,我已经能够检测子域名并至少指向适当的子文件夹,但我不认为这会给subdomain.domain.com .htaccess文件自己的mod_rewrite留下任何机会,一旦服务器知道子域的文件夹所在的位置,它就会接管。

这是我为的.htaccess:

RewriteCond %{HTTP_HOST} ^([a-zA-Z0-9-]+)\.domain.com$ 
RewriteRule ^(.+) /vhosts/%1.domain.com/html/pages/$1.php [L,QSA] 

...我的文件夹结构:

domain.com 
    html 
     .htaccess 
     vhosts 
      subdomain.domain.com 
       html 
        .htaccess 
        pages 
         index.php 
         pagename.php 

因此,大家可以看到,里面subdomain.domain.com该网站是依赖于它是自己的mod_rewrite以便运行,因为页面文件不在服务器期望的位置。

现在,我知道我可以在适当的条件下在我的根域的.htaccess中包含子域的.htaccess规则,但踢足球是我需要能够将完全不同的域名指向这些子域名该子域可通过subdomain.domain.com和mydomain.com访问),因此这些subdomain.domain.com文件夹需要完全自给自足。

那么,怎样才能让我的服务器在一个子文件夹中的正确位置看,同时让自己的的.htaccess mod_rewrites工作?

任何帮助,非常感谢!


刚把有人建议mod_rewrites是错误的方式去了解它,mod_vhs是我想用什么。有谁知道mod_vhs?

回答

2

我把它用VirtualHosts工作:

NameVirtualHost * 

# Root domain homepage 
<VirtualHost *> 
    DocumentRoot /var/www/domain.com/html 
    ServerName domain.com 
    ServerAlias www.domain.com 
</VirtualHost> 

# Hosted sites 
<VirtualHost *> 
    VirtualDocumentRoot /var/www/vhosts/%0/html 
    ServerName * 
    ServerAlias * 
</VirtualHost> 

第一项捕捉请求我的主页,提供了标准的网站,而其他内容和路线的不同位置基础上的第二卡子请求的主机名称。

1

简单。只需确保子域名与服务器的DNS注册,那么像这样一个htaccess点吧:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^sub.domain.com$ [OR] 
RewriteCond %{HTTP_HOST} ^(www\.)?sub\.domain\.com 
RewriteRule .* /subfolder [L] 

无需与子文件夹的htaccess的混乱。

+0

谢谢!有一个通配符子域允许我跳过注册子域与我的DNS? – bryanb

+0

不,相信我,我试过了。您必须向DNS注册。你可以得到它的工作,但它会导致巨大的文件权限错误。我的主持人在周末关闭了,我自己发明了一种新的方法,让没有他们的子域名。该子域名结束了000或什么的。大错。 ; D – alt

+0

实际上,这似乎只是将浏览器转发到子文件夹(subdomain.domain.com/vhosts/subdomain.domain.com/),而不是将浏览器保留在subdomain.domain.com,只是从子文件夹。也似乎没有注意到子域mod重写或者... – bryanb