我有一个标准的 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/