htaccess 301重定向www&非www到非www子文件夹

时间:2011-04-17 08:42:22

标签: apache .htaccess mod-rewrite redirect url-rewriting

我正在尝试将www和非www重定向到非www子文件夹/论坛。

我目前正在使用此代码:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [OR]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ http://example.com/forums/$1 [R=301,L]

它运作良好,但是存在一些问题。

如果我输入网址:example.com,它会将我带到example.com/forums。 -OK

如果我输入网址:example.com/test,它会将我带到example.com/test。 -OK

如果我输入网址:www.example.com,则会将我转到example.com/forums。 -OK

如果我输入网址:www.example.com/test,则会将我转到example.com/forums/test。 -WRONG

如何修复www.example.com/test发生的错误?

我希望www.example.com/test引导到example.com/test。

请帮助我,谢谢!

2 个答案:

答案 0 :(得分:2)

在.htaccess文件中尝试以下规则:

RewriteEngine on
Options +FollowSymlinks -MultiViews

# redirect empty URL to /forums
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^$ http://example.com/forums [R=301,L]

# non forums handler
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/forums [NC]
RewriteRule ^(.+)$ http://example.com/$1 [R=301,L]

答案 1 :(得分:0)

如果您没有任何其他子域指向同一目录(或者它们也被重定向也无关紧要),那么您可以尝试这样做:

RewriteEngine On
RewriteRule ^$ /forums/ [R=301,L]

这会将对www.example.com/和example.com/的任何请求重定向到子文件夹/ forums /,并保持所有其他请求不受影响。

假设您的测试用例是唯一要考虑的测试用例,那么这应该可行。如果您有任何其他情况,则可能需要扩展规则。