首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当应用两个重写器时,追加到URL的查询字符串

问当应用两个重写器时,追加到URL的查询字符串
EN

Stack Overflow用户
提问于 2014-08-05 09:54:51
回答 1查看 47关注 0票数 0

我正在重写一个网站从经典的asp到php。并不是所有的新文件名都匹配,所以我不能简单地将.asp重写到.php。php站点将使用更易读的URL。我对以下情况有问题:

旧页

旧式profile.asp.ABC公司=ABC+Limited

需要重定向到

/profiles/ABC+Limited

下列重写/重写程序在唯一适用的规则中工作得很好:

代码语言:javascript
复制
RewriteCond %{QUERY_STRING}     ^company=([^/]+)$    [NC]
RewriteRule ^old-profile\.asp$ /profiles/%1? [R=301,L]

因此,如果我输入/old-profile.asp?company=ABC+Limited,结果是/profile/ABC+Limited。

但是,在.htaccess文件的后面,我需要使用以下重写规则:

代码语言:javascript
复制
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文件中的其他规则,并导致了这个问题。我把它移到文件的开头,一切正常。

EN

回答 1

Stack Overflow用户

发布于 2014-08-05 10:57:23

保持你的.htaccess像这样:

代码语言:javascript
复制
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]

然后,请确保在新浏览器中测试这一点,以避免旧的浏览器缓存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25135907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档