301从旧页面重定向到Apache上的新页面无法正常工作

时间:2011-09-20 15:00:24

标签: .htaccess mod-rewrite redirect

在这种情况下,简单的301重定向不起作用 - 例如:

Redirect 301 /oldpage http://www.mysite.co.uk/newsubdir/newpage

该网站是动态的,.htaccess已经将网页重命名为包含查询字符串的网址中的搜索引擎友好网址。

RewriteRule ^(.*)/(.*)$  index.php?page_name=$1&sub=$2 [NC,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$
RewriteRule (.*)([^/])$ http://www.mysite.co.uk/$1$2/ [R=301,L]

当我们在同一个.htaccess(底部)中使用上述301重定向时,页面会重定向,但查询字符串会被令人沮丧地添加到URL的末尾,我们还没弄清楚为什么或如何防止它。

301重定向后,URL看起来像: -

http://www.mysite.co.uk/newsubdir/newpage/?page_name=old-page&sub=

...导致404错误 - 只是在URL的末尾添加的查询字符串正在打破重定向。

请任何人可以告知需要采取哪些措施来解决这个问题?

由于

2 个答案:

答案 0 :(得分:4)

在网址末尾添加问号?,以防止将现有查询字符串复制到新网址:

Redirect 301 /oldpage http://www.mysite.co.uk/newsubdir/newpage?

但由于你已经在使用mod_rewrite,我建议也将它用于此任务(将此规则置于其他重写规则之上):

RewriteRule ^oldpage$ http://www.mysite.co.uk/newsubdir/newpage? [R=301,L]

答案 1 :(得分:0)

重定向301 /oldfile.htm http://www.example.com/newfile.htm

使用它。工作正常。