动态301 .htaccess重定向/重写

时间:2013-05-29 18:43:41

标签: .htaccess mod-rewrite redirect

我有一个有论坛的网站,这是我的htaccess文件中的当前重写规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*/?forum/?(.*)$ /forum.php [L]

现在,因为我有谷歌索引的网址:

www.domain.com/abc/forum/rest-of-url  
www.domain.com/defg/forum/rest-of-url   
www.domain.com/something-else/forum/rest-of-url 

并且所有链接都显示相同的页面,只能访问:

www.domain.com/forum/rest-of-url 

域/和/ forum /

之间没有任何单词(abc,defg等)

基本上就是这样的链接:

www.domain.com/abc/forum/rest-of-url

应该301重定向到:

www.domain.com/forum/rest-of-url 

我尝试将重写规则更改为:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule /forum/?(.*)$ /forum.php [L]

但是后来我在Google网站管理员工具中为所有以前编入索引的网址收到了大量404错误,所以我认为有一个解决方法是301重定向,但我还没想出如何避免进入循环。

感谢任何帮助。感谢

1 个答案:

答案 0 :(得分:0)

通过httpd.conf启用mod_rewrite和.htaccess,然后将此代码放在.htaccess目录下的DOCUMENT_ROOT中:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# redirect any /foo/forum/index to /forum/index
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^[^/]+/(forum/[^/]+/?)$ /$1 [L,R=301,NC]

验证一切正常后,将R=302替换为R=301。在测试mod_rewrite规则时,请避免使用R=301(永久重定向)。