RewriteRule弄乱了301重定向

时间:2013-07-26 17:51:58

标签: apache .htaccess http-status-code-301

我正在重建我的整个网站,以前的版本只使用静态html页面,并且是管理的噩梦。

在新网站中,我已经拥有.htaccess,内容如下:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /MySite/?q=$1

它通过PHP重写URL。

然而,我还需要做的是添加这样的行:

Redirect 301 /oldpage.html http://www.mysite.com/dir/newpage.html
Redirect 301 /oldpage2.html http://www.mysite.com/dir/newpage2.html
Redirect 301 /oldpage3.html http://www.mysite.com/dir/newpage3.html

我网站的网址目录结构已经完全改变,我在google中有很多网页索引,需要将它们填入新网址。

我尝试将这些新的301指令添加到现有.htaccess的末尾,但最后我被重定向到这样:

http://www.mysite.com/dir/newpage.html?q=oldpage.html

我不希望它最后有查询字符串,我该如何删除它?

1 个答案:

答案 0 :(得分:1)

只需将它们放在带有L指令的主重定向之前:

Options +FollowSymlinks
RewriteEngine on

RewriteRule ^oldpage\.html$ /dir/newpage.html [R=301,NC,L]
RewriteRule ^oldpage2\.html$ /dir/newpage2.html [R=301,NC,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /MySite/?q=$1