在这种情况下,简单的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的末尾添加的查询字符串正在打破重定向。
请任何人可以告知需要采取哪些措施来解决这个问题?
由于
答案 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
使用它。工作正常。