【发布时间】:2015-08-08 13:52:42
【问题描述】:
我有一个旧域 (old.com),其中包含大量动态 url 以及在谷歌中定位良好的静态 url。我有一个新域(new.cat),其中相同的内容有新的 url,对 seo 更友好。
old.com 站点位于 IIS 主机中,因此我已将其转移到带有 apache 的服务器,在那里我可以使用 htaccess 将旧 URL 重定向到新 URL。我已经使用数据库中的 php 完成了它,以免手动编写每条指令。
示例动态旧网址 ==> 新网址:
old.com/mots.asp?nm=1 ==> new.cat/moix old.com/mots.asp?nm=2 ==> new.cat/miol ...
示例静态旧网址 ==> 新网址:
old.com/mesos.asp ==> new.cat/arxiu-cronologic old.com/mot_cerca_tema.asp?tipus=frases%20fetes ==> new.cat/tema/frases-fetes/ ...
嗯,我的 .htaccess 文件有两种规则:
重定向 301 -> 用于静态旧网址(不带参数) ReweriteRule -> 用于动态旧网址(带参数)
就是这样的一种规则(我还有很多,但我只是为了清楚起见才放了一些人。“new.cat”真的充满了httpp://协议)
Redirect 301 /mesos.asp new.cat/mots/arxiu-cronologic/
Redirect 301 /inici.asp new.cat/
Redirect 301 /mot_cerca.asp new.cat/mots/arxiu-cronologic/
RewriteEngine on
RewriteCond %{QUERY_STRING} ^nm=1$
RewriteRule ^mot.asp$ new.cat/moix/ [R=301,L]
RewriteCond %{QUERY_STRING} ^nm=2$
RewriteRule ^mot.asp$ new.cat/miol/ [R=301,L]
RewriteRule ^mot_cerca_resultat.asp$ new.cat/miol/ [R=301,L]
RewriteCond %{QUERY_STRING} ^nm=3$
RewriteRule ^mot.asp$ new.cat/gat-vell/ [R=301,L]
RewriteRule ^mot_cerca_resultat.asp$ new.cat/gat-vell/ [R=301,L]
#last rule for all the other dynamic urls
RewriteRule ^(.*)$ new.cat/$1 [R=301,L]
问题是“重定向 301”规则没有执行,导致 404 错误,因为执行的规则是最后一个。
例如:
old.com/mesos.asp results in new.cat/mesos.asp (that not exists in new.cat)
如果“重定向 301”规则位于重写规则之前或之后,则会出现此问题。
如果我只将重定向 301 而不是其他规则放入 htaccess 文件中,则重定向将正确执行
那么,任何人有任何线索可以帮助我解决这个问题吗?我想存在某种偏好问题,但我不明白为什么。我认为问题可能是因为 url 的 .asp 扩展名,但如果规则在隔离或重写规则下工作正常,那么这似乎不是问题。
新站点使用 wordpress 作为后端,从那里我可以处理来自 old.com 的 404 错误并将它们重定向到一个特殊页面。
谢谢大家。
【问题讨论】:
标签: .htaccess rewrite redirect