重定向子域而不更改URL

时间:2014-05-24 11:12:53

标签: apache .htaccess mod-rewrite redirect

我用mod_rewrite获得了apache2,我也可以访问该站点的.htaccess。

我希望网址profile.domain.com/username重定向到www.domain.com/profiles/php?user=username,但保持网址为profile.domain.com/username。我已经有一个通配符设置来捕获所有子域。我正在尝试使用:

RewriteCond     %{HTTP_HOST}    ^profile\.domain\.com$ [NC]
RewriteRule     ^(.+)$          http://www.domain.com/profiles/php?user=%1 [R=301,L]

但是它将网址更改为http://www.domain.com/profiles/php?user=并且从未捕获用户名。另外,我不希望它更改我希望它保留的网址profile.domain.com/username

1 个答案:

答案 0 :(得分:0)

你的规则几乎是正确的。 %1替换为上一个RewriteCond中的第一个捕获组。由于没有第一个捕获组,它被......替换。您想要使用$1。它由RewriteRule中的第一个捕获组替换。

你犯的第二个错误是使用R - 标志进行外部重定向。删除该标志,并删除域名,并将其视为内部重写。确保清空浏览器的缓存,因为它会记住'你做的外部重定向,而不是使用你有的新重写。

你最终会:

RewriteCond     %{HTTP_HOST}    ^profile\.domain\.com$ [NC]
RewriteRule     ^(.+)$          /profiles/php?user=$1 [L]