我在将子域重写到位于Web 根目录之上的目录时遇到了一些麻烦。我以前在 mod_rewrite 方面有很多经验,但这个特殊问题超出了我的范围。
据我所知,mod_rewrite 是在发脾气,因为我坚持使用相对目录 ( ..
) 来确定子域文件所在的目录。
不幸的是,我的客户的规格有两个限制:
- 将子域作为 Web 根目录的子目录不是一种选择。除特定子域外,不得从任何地方访问子域(可能存在目录冲突)。这意味着
http://subdomain.example.com/
不能从该目录访问,因为该目录可能在根域上的应用程序中使用。http://example.com/subdomain/
- 客户端不知道子域文件的绝对路径,因为将使用共享主机。
如果有人可以帮助我解决这个问题,将不胜感激!我也很想在未来的项目中开始使用它,与我们目前处理子域的方式相比,这是一个非常优雅的解决方案......如果有人能让它工作的话!
编辑:认为指出在请求时返回http://subdomain.example.com/
a400 Bad Request
而不是500 Internal Server Error
我预期的 a 可能很有用。请求根域时,一切都按预期工作。
当前.htaccess
文件。
# Begin Rewrite Module for http://*.example.com/
# ==============================================
<IfModule mod_rewrite.c>
# Turn the rewrite engine on.
RewriteEngine On
RewriteBase /
# Map subdomains to their respective directories.
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$
RewriteRule (.*) /../public_subdomains/%1/$1 [L]
# Rewrite all requests for the root domain to always be served through "index.php".
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /index.php/$1 [L]
</IfModule>
当前目录结构。
/
application/
cgi-bin/
framework/
public_html
public/
css/
images/
js/
.htaccess
index.php
public_subdomains/
mysubdomain/
index.php
anothersubdomain/
index.php