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

标签 apache .htaccess mod-rewrite subdomain wildcard

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

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

  • 如果请求 subdomain.domain.com,请查找名为 subdomain.domain.com 的文件夹
    • 如果找到该文件夹​​,请将其称为主目录并提供其中的网站,并遵循其中可能存在的任何 .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 吗?

最佳答案

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

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

关于apache - 将子域转发到子文件夹并保留子文件夹的 .htaccess mod_rewrite 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7412594/

相关文章:

php - 仅为根目录设置自定义默认页面(不适用于子目录)

.htaccess - htaccess 无扩展名重写

apache - 如何在 Apache 中删除 cookie

apache - nginx : Its Multithreaded but uses multiple processes?

debian 安装上的 WordPress apache2 虚拟主机配置

apache - mod_rewrite : Rewrite URL to point to cgi script, 但保持重写隐藏

.htaccess - Chrome 的 htaccess 有问题,但 Safari 没有?

.htaccess - mod重写htaccess问题

从 certbot 删除 ssl 证书后,Apache 没有启动

java - mapreduce程序抛出数组索引超出范围错误