【问题标题】:htaccess subdomain rewrite without a redirecthtaccess 子域重写没有重定向
【发布时间】:2013-11-12 20:47:49
【问题描述】:
使用 htaccess 重写,我希望我的网址 http://*.phoneataxi.com/(其中 * 是通配符,不包括“www”)按原样显示在地址栏中,但从 http://* 获取信息.phoneataxi.com/test.php?c=*.
我尝试了很多不同的东西,但没有什么能完全满足我的需要。大多数示例都是将子域重定向到地址栏中的“/test.php”文件,我不想这样做。
我试图不必在我的 webroot 中创建单独的子域和子域文件夹。
想法?
【问题讨论】:
标签:
.htaccess
mod-rewrite
subdomain
【解决方案2】:
更新(2020 年)
有关此主题的一些答案非常陈旧,不再按预期工作。
在搜索了几个小时真正有效的东西之后,这就是我想出的;编辑你认为合适的:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ([a-z0-9]+)\.
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteCond %{DOCUMENT_ROOT}/%{ENV:BASE}/index.php -f
RewriteRule ^(.*)$ %{ENV:BASE}/index.php [L,NC,QSA]
RewriteCond %{DOCUMENT_ROOT}/%{ENV:BASE}/index.html -f
RewriteRule ^(.*)$ %{ENV:BASE}/index.html [L,NC,QSA]
故障
确保在您的主机上安装并启用了 rewrite 模块
- 首先我们打开
rewrite 引擎并设置路径库
- 然后隔离 子域 - 第一个点之前的任何字母/数字
- 在这个运行时环境中设置一个包含子域的变量
- 检查子域文件夹和索引文件是否存在
- 如果它确实存在 - 然后将该文件用作请求处理程序(无重定向)
- 如果不存在则请求正常进行
标志
这里使用的标志解释here,但上面使用的很简单:
-
[L] 最后一条规则,其余的忽略
-
[NC] 无大小写,无大小写限制
-
[QSA] 我记得这是“查询字符串附加”:D