【发布时间】:2012-05-14 04:37:00
【问题描述】:
我的服务器提供商停止给我在控制面板中创建子域的可能方法,他们说我应该用 htaccess 解决它。
所以我必须做这样的事情。当用户键入http://asdf.example.com 时,它应该得到http://example.com/asdf 的内容(因为提供者甚至改变了 FTP 的结构......它们怎么样)
我没有找到任何教程。提前致谢。
【问题讨论】:
我的服务器提供商停止给我在控制面板中创建子域的可能方法,他们说我应该用 htaccess 解决它。
所以我必须做这样的事情。当用户键入http://asdf.example.com 时,它应该得到http://example.com/asdf 的内容(因为提供者甚至改变了 FTP 的结构......它们怎么样)
我没有找到任何教程。提前致谢。
【问题讨论】:
TerryE 答案的更通用版本。不过我还没有测试过!!!
RewriteCond %{HTTP_HOST} !www.example.com
RewriteCond %{HTTP_HOST} (.*).example.com
RewriteCond %1/$0 !^([^/]+)/\1
RewriteRule ^.* %1/$0 [L]
【讨论】:
fred,但 cond2 的正则表达式会失败,所以即使cond 成功(因为 ! 运算符),不会为重写规则设置 %1。 但是,我们应该能够拆分规则规则模式^([^/|+/)?(.*) 并设置 $1 和 $2 然后使用 RewriteCond $1%1 !^(.*?)/\1 作为不相等检查,然后重复 cond2 以重置 %1。仍然+1,因为它是个好主意。回到我的希腊岛度假胜地!
| 应该是 ]。
您可以使用 mod_rewrite 和 mod_proxy 做到这一点:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^asdf\.example\.com$
RewriteRule ^ http://example.com/asdf%{REQUEST_URI} [L,P]
【讨论】:
您不需要 mod 代理。只需进行内部重定向:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} =asdf.example.com
RewriteCond $0 !^asdf/
RewriteRule ^.* asdf/$0 [L]
规则重写请求前缀为asdf/,但前提是 (1) 主机是 http:/asdf... 并且 (2) 重写尚未发生。您需要 (2) 来防止迭代循环。 $0 是规则中的匹配字符串。
希望这会有所帮助。
【讨论】: