【问题标题】:Forward a subdomain to a subfolder and preserve subfolder's .htaccess mod_rewrite rules将子域转发到子文件夹并保留子文件夹的 .htaccess mod_rewrite 规则
【发布时间】:2011-11-16 18:37:17
【问题描述】:

我有一个标准的 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 可以通过 subdomain.domain.com 和 mydomain.com 访问),因此这些 subdomain.domain.com 文件夹需要完全自给自足。

那么如何让我的服务器在正确的位置查找子域的文件夹,同时允许其自己的 .htaccess mod_rewrites 工作?

非常感谢任何帮助!


刚刚有人建议 mod_rewrites 是错误的方法,而 mod_vhs 是我想要使用的。有人知道 mod_vhs 吗?

【问题讨论】:

    标签: apache .htaccess mod-rewrite subdomain wildcard


    【解决方案1】:

    我使用 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>
    

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

    【讨论】:

      【解决方案2】:

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

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

      无需弄乱子文件夹的 htaccess。

      【讨论】:

      • 谢谢!拥有通配符子域是否可以让我跳过使用我的 dns 注册子域?
      • 不,相信我,我已经试过了。您必须使用 DNS 注册它。你可以让它工作,但它会导致巨大的文件权限错误。我的主机周末关闭,我自己发明了一种新方法来制作没有它们的子域。子域最终被 chomped 000 或其他东西。大错。 ;D
      • 实际上,这似乎只是将浏览器转发到子文件夹(subdomain.domain.com/vhosts/subdomain.domain.com/),而不是将浏览器保留在 subdomain.domain.com 并且只是从子文件夹中检索站点。似乎也没有注意子域 mod 重写...
      • Doh,我不确定这是否适合我。这是一个允许用户立即为迷你站点创建子域的应用程序。
      • 听起来很乱。对不起。也许我不明白。
      猜你喜欢
      • 2016-01-19
      • 1970-01-01
      • 2018-10-19
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2011-12-01
      相关资源
      最近更新 更多