我正在重写一个网站从经典的asp到php。并不是所有的新文件名都匹配,所以我不能简单地将.asp重写到.php。php站点将使用更易读的URL。我对以下情况有问题:
旧页
旧式profile.asp.ABC公司=ABC+Limited
需要重定向到
/profiles/ABC+Limited
下列重写/重写程序在唯一适用的规则中工作得很好:
RewriteCond %{QUERY_STRING} ^company=([^/]+)$ [NC]
RewriteRule ^old-profile\.asp$ /profiles/%1? [R=301,L]因此,如果我输入/old-profile.asp?company=ABC+Limited,结果是/profile/ABC+Limited。
但是,在.htaccess文件的后面,我需要使用以下重写规则:
RewriteRule ^profiles/([^/]+)$ /new-profile.php?company=$1这对于新站点上的页面也非常有效,即URL /profile/ABC+Limited将在/new-profile.php?company=ABC+Limited上显示该页面。
这听起来不错,但问题是这2条规则并不是相互配合的。问题是以下URL的结果:
/old-profile.asp?company=ABC+Limited
是:
/profiles/ABC+Limited?company=ABC+Limited
我不希望?company+ABC+Limited在这个新网址的末尾。在第一次重写中,我添加了尾随?如果我注释掉了第二个规则,那么这个规则就可以了,但是当应用这两个规则时,就会出现querystring。
非常感谢您的帮助!
在@anubhava和@Samurai8 8的帮助下,更新了,我发现了这个问题的原因。这个旧网站很有力量。在网址和新站点的开头,没有万维网。在URL的开头。
天啊。不想。规则毕竟是htaccess文件中的其他规则,并导致了这个问题。我把它移到文件的开头,一切正常。
发布于 2014-08-05 10:57:23
保持你的.htaccess像这样:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^company=([^&]+) [NC]
RewriteRule ^old-profile\.asp$ /profiles/%1? [R=301,L,NE,NC]
RewriteRule ^profiles/([^/]+)/?$ new-profile.php?company=$1 [L,QSA]然后,请确保在新浏览器中测试这一点,以避免旧的浏览器缓存。
https://stackoverflow.com/questions/25135907
复制相似问题