Apache 将子域转发到子文件夹并保留子文件夹';s.htaccess mod_重写规则

Apache 将子域转发到子文件夹并保留子文件夹';s.htaccess mod_重写规则,apache,.htaccess,mod-rewrite,subdomain,wildcard,Apache,.htaccess,Mod Rewrite,Subdomain,Wildcard,我有一个标准的LAMP设置,我试图使子域自动工作,只要适当命名的文件夹存在 如果您熟悉MediaTemple的GridServer共享托管服务,我将尝试模拟它处理通配符子域的方式: 如果请求subdomain.domain.com,请查找名为subdomain.domain.com的文件夹 如果找到该文件夹,请将其呼叫主页,并按照其中可能存在的任何.htaccess文件提供该文件夹内的站点 如果找不到文件夹,请显示domain.com 我被告知在我的根域中重写.htaccess mod_

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

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

  • 如果请求subdomain.domain.com,请查找名为subdomain.domain.com的文件夹
    • 如果找到该文件夹,请将其呼叫主页,并按照其中可能存在的任何.htaccess文件提供该文件夹内的站点
    • 如果找不到文件夹,请显示domain.com
我被告知在我的根域中重写.htaccess mod_是一个好办法,我能够检测子域并至少指向相应的子文件夹,但我认为,一旦服务器知道子域文件夹的位置,subdomain.domain.com.htaccess文件自己的mod_重写就没有机会接管

这是我的.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_重写工作的同时,查找子域文件夹的正确位置呢

非常感谢您的帮助



刚刚有人建议说mod_重写是错误的方式,mod_vhs是我想要使用的。有人知道mod_vhs吗?

简单。只需确保子域已在服务器的DNS中注册,然后使用如下方式指向它:

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

无需干扰子文件夹的htaccess。

我使用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>
NameVirtualHost*
#根域主页
DocumentRoot/var/www/domain.com/html
ServerName域名.com
ServerAlias www.domain.com
#托管站点
VirtualDocumentRoot/var/www/vhosts/%0/html
服务器名*
服务器别名*

第一个条目捕获对我的主页的请求并提供标准站点,而第二个条目捕获其他所有内容并根据请求的主机名路由到不同的位置。

谢谢!拥有一个通配符子域是否允许我跳过使用dns注册子域?不,相信我,我已经尝试过了。您必须向DNS注册它。您可以让它工作,但它会导致巨大的文件权限错误。我的主机周末关闭了,我自己发明了一种新的方法来创建没有它们的子域。子域最后被咬了000块什么的。大错特错;实际上,这似乎只是将浏览器转发到子文件夹(subdomain.domain.com/vhosts/subdomain.domain.com/),而不是将浏览器保留在subdomain.domain.com,然后从子文件夹检索站点。也似乎没有注意到mod重写的子域…Doh,我不确定这是否是我的选择。这是一款允许用户即时为迷你网站创建子域的应用。听起来很混乱。很抱歉也许我不明白。