将子域转发到子文件夹并保留子文件夹的.htaccess mod_rewrite规则

时间:2011-09-14 07:17:33

标签: apache .htaccess mod-rewrite subdomain wildcard

我有一个标准的LAMP设置,只要存在适当命名的文件夹,我就会尝试让子域自动工作。

如果您熟悉MediaTemple的GridServer共享托管服务,我正在尝试模拟处理通配符子域的方式:

  • 如果请求subdomain.domain.com,请查找名为subdomain.domain.com的文件夹
    • 如果找到该文件夹​​,请将其命名为home并提供其中的站点,并遵守可能存在的任何.htaccess文件。
    • 如果未找到任何文件夹,只需显示domain.com

我被告知我的根域中的.htaccess mod_rewrite是要走的路,我已经能够检测到子域并至少指向相应的子文件夹,但我不认为这会留下任何机会对于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 个答案:

答案 0 :(得分: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 :(得分:1)

易。只需确保子域名已在您的服务器的DNS中注册,然后使用这样的htaccess指向它:

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

无需弄乱子文件夹的htaccess。