在我的网站上,用户可以添加需要重定向的各种网址。
例如;来自: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的东西不是我的强项,所以我不知道如何解决它。
有什么想法吗?
答案 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?
但只有在需要的时候