重定向301 /重写难题

时间:2011-06-17 11:59:06

标签: php apache .htaccess mod-rewrite

在我的网站上,用户可以添加需要重定向的各种网址。

例如;来自:domain.com/oldpage/36 /

对此:domain.com/newpage/47 /

它们被添加到.htaccess中,如下所示:

Redirect 301 /oldpage/36/ /new-page/47/

但是当访问旧页面时,他们会得到这个:

domain.com/newpage/47/?pid=36&pagename=oldpage

我很确定这些重写规则会导致这种困境:

RewriteRule ([^.]+)/([0-9]+)/$ index.php?pid=$2&pagename=$1
RewriteRule ([^.]+)/([0-9]+)/([^.]+) index.php?pid=$2&pagename=$1&vars=$3

然而,mod_rewrite的东西不是我的强项,所以我不知道如何解决它。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

既然你已经在使用mod_rewrite了,我想你也应该使用重写来重定向

RewriteRule /oldpage/36/ /new-page/47/ [R=301]

这将“重写”从旧到新的网址,并将浏览器重定向到状态代码为301的新网址。 [R]指令意味着重定向,这也会阻止其他规则处理,因此只有在使用新网址从broswer发送新请求时才会处理其他规则。

答案 1 :(得分:2)

添加?会使Rewrite不将查询字符串添加到网址。

所以这应该有效:

Redirect 301 /oldpage/36/ /new-page/47/?

作为预防措施,您还可以将其添加到:

的末尾
RewriteRule ([^.]+)/([0-9]+)/$ index.php?pid=$2&pagename=$1?
RewriteRule ([^.]+)/([0-9]+)/([^.]+) index.php?pid=$2&pagename=$1&vars=$3?

但只有在需要的时候