我正在尝试强制从网站的www
子域重定向到forum
子域,同时保留查询字符串。换句话说,我希望如此:
http://www.website.com/index.php?key=value
转变为:
http://forum.website.com/index.php?key=value
所以我写了这个所谓的简单规则:
RewriteCond %{HTTP_HOST} ^www\.website\.com$
RewriteRule (.*) http://forum.website.com/$1 [L,QSA,R=301]
这是我在.htaccess中的唯一重写规则。
上面的示例网址被重写为:
http://forum.website.com/forum/index.php?key=value
这种奇怪的行为(以及对我来说,意外的)行为是什么?我做错了什么/错过了什么?
编辑1:添加了重写日志(修剪无用的日期信息)
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (3) [perdir /var/www/website/] strip per-dir prefix: /var/www/website/forum/test -> forum/test
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (3) [perdir /var/www/website/] applying pattern '(.*)' to uri 'forum/test'
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (4) [perdir /var/www/website/] RewriteCond: input='www.website.com' pattern='^www\.website\.com$' => matched
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (2) [perdir /var/www/website/] rewrite 'forum/test' -> 'http://forum.website.com/forum/test'
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (2) [perdir /var/www/website/] explicitly forcing redirect with http://forum.website.com/forum/test
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (1) [perdir /var/www/website/] escaping http://forum.website.com/forum/test for redirect
[www.website.com/sid#7f3580c0a4d8][rid#7f3580d935a0/initial] (1) [perdir /var/www/website/] redirect to http://forum.website.com/forum/test [REDIRECT/301]
[forum.website.com/sid#7f3580c54d70][rid#7f3580d935a0/initial] (3) [perdir /var/www/website/] add path info postfix: /var/www/website/forum/forum -> /var/www/website/forum/forum/test
[forum.website.com/sid#7f3580c54d70][rid#7f3580d935a0/initial] (3) [perdir /var/www/website/] strip per-dir prefix: /var/www/website/forum/forum/test -> forum/forum/test
[forum.website.com/sid#7f3580c54d70][rid#7f3580d935a0/initial] (3) [perdir /var/www/website/] applying pattern '(.*)' to uri 'forum/forum/test'
[forum.website.com/sid#7f3580c54d70][rid#7f3580d935a0/initial] (4) [perdir /var/www/website/] RewriteCond: input='forum.website.com' pattern='^www\.website\.com$' => not-matched
[forum.website.com/sid#7f3580c54d70][rid#7f3580d935a0/initial] (1) [perdir /var/www/website/] pass through /var/www/website/forum/forum
编辑2:这是我的website.conf:
<VirtualHost *:80>
ServerName website.com
DocumentRoot /var/www/website/forum/
</VirtualHost>
<VirtualHost *:80>
ServerName www.website.com
DocumentRoot /var/www/website/forum
</VirtualHost>
<VirtualHost *:80>
ServerName forum.website.com
DocumentRoot /var/www/website/forum
<Directory />
AddHandler fcgid-script .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php
Options ExecCGI Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
答案 0 :(得分:1)
检查重写日志我发现forum/
已经是网址的一部分。试试这个:
RewriteCond %{HTTP_HOST} ^www\.website\.com$
RewriteRule ^forum/(.*) http://forum.website.com/$1 [L,QSA,R=301]