htaccess将子域重定向到某个页面?

时间:2013-03-20 22:40:22

标签: php .htaccess

我需要将所有子域重定向到特定页面,而不实际更改URL,因为我将根据URL中的子域显示此特定页面上的不同内容。

假设我的网站位于testdomain.com/site1 /

我希望将所有子域名(例如xyz.testdomain.com/site1/或甚至xyz.testdomain.com)重定向到http://testdomain.com/site1/index.php/test.php

的特定页面

然后,浏览器需要加载http://testdomain.com/site1/index.php/test.php,但网址仍为xyz.testdomain.com。

这样做的目的是让某人可以访问abc.testdomain.com或xyz.testdomain.com,并且两者都会将用户带到testdomain.com/site1/index.php/test.php,然后进行测试.php,我有一些代码可以获取URL,如果url是abc.testdomain.com,它将显示某些内容,而如果子域是xyz.testdomain.com,它将显示不同的内容。

这是我能用htaccess做的吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

使用mod_rewrite你可以一起破解它。

# Step 1: If the user went to example.com or www.example.com
# then we don't want to redirect them. (S=1 says skip the next rule)
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com
RewriteRule ^ - [S=1]

# Step 2: Anything else is redirected to our catcher script.

# Option 1: keeps the path they went to, but discards the domain
# i.e. xyz.example.com/abc/def.txt => /var/www/cgi-bin/abc/def.txt
RewriteRule ^/?(.*) /var/www/cgi-bin/$1 [QSA,L]

# Or Option 2: take all requests to the same file
# i.e. xyz.example.com/abc/def.txt => /var/www/cgi-bin/myfile.php
RewriteRule ^ /var/www/cgi-bin/myfile.php [QSA,L]

QSA告诉它转发查询字符串,L告诉它停止寻找更多重定向(不是绝对必要的,但如果你有很多这样的事情,有时会有帮助)。

您还可以将变量作为查询参数传递给脚本,QSA标志可确保它们不会替换原始值;

# xyz.example.com/abc/def.txt => /var/www/cgi-bin/myfile.php?host=xyz.example.com&path=/abc/def.txt
RewriteRule ^/?(.*) /var/www/cgi-bin/myfile.php?host=%{HTTP_HOST}&path=/$1 [QSA,L]

这意味着您无需担心找出请求来自脚本内部的位置(这可能实际上是不可能的,我不确定)。相反,您可以将其作为普通参数读取(它也像普通参数一样可以破解;请务必对其进行消毒)。