Apache CakePHP 301重定向附加额外的查询字符串参数

Apache CakePHP 301重定向附加额外的查询字符串参数,apache,cakephp,mod-rewrite,redirect,url-rewriting,Apache,Cakephp,Mod Rewrite,Redirect,Url Rewriting,我正在尝试重定向域名上的旧asp页面,以便它们链接到CakePHP版本(使用1.3)上各自的页面。域名是相同的。正在添加这些重定向,以便搜索引擎中的结果转到新的“蛋糕”页面 我在我的/.htaccess文件中有一堆重定向301(默认为app/.htaccess和app/webroot/.htaccess) 请注意,当我将所有301重定向放入虚拟主机文件时,url参数是而不是。我想将所有这些重定向保存在我的.htaccess文件中。如何防止追加此url查询字符串参数?这看起来像是mod_rewri

我正在尝试重定向域名上的旧asp页面,以便它们链接到CakePHP版本(使用1.3)上各自的页面。域名是相同的。正在添加这些重定向,以便搜索引擎中的结果转到新的“蛋糕”页面

我在我的/.htaccess文件中有一堆重定向301(默认为app/.htaccess和app/webroot/.htaccess)


请注意,当我将所有301重定向放入虚拟主机文件时,
url
参数是而不是。我想将所有这些重定向保存在我的.htaccess文件中。如何防止追加此
url
查询字符串参数?

这看起来像是mod_rewrite和mod_alias相互重叠的情况。当应用
重定向
指令时,URI处理管道不会结束,它会继续通过管道,mod_rewrite会完成它的工作。不幸的是,最终结果并不总是你想要的。您可以继续使用mod_rewrite并删除
重定向
指令

您可以删除2个
重定向
指令,并将这2个
重写规则
s添加到将请求映射到
app/webroot
的指令之上:

RewriteRule ^contacts\.asp$ http://domain/contacts [L,R=301]
RewriteRule ^users\.asp$ http://domain/users [L,R=301]

谢谢你的回复。我想我明白你的意思。将
重写规则^contacts\.asp$http://domain/contacts [L,R=301]
保持参数不变?例如,将
http://domain/contacts.asp?contact=x
重定向到
http://domain/contacts?contact=x
?另外,关于
Reddirect
指令方法,是否有任何方法可以在这些.htaccess文件中移动它们,使它们成为最后计算的文件?@penguinegg是的,现有查询字符串将自动追加。不,在
重定向
语句中移动不会影响任何内容,因为它们是两个不同的模块。一个模块运行并完成它的工作,然后另一个模块运行并完成它的工作,然后,最后你有一个URI和一个重定向。如果我想将不同的参数集定向到我的应用程序中的不同位置,它会变得更复杂吗?以下只是一个示例(因此url结构可能没有意义)。说我想要直接
http://domain/contacts.asp?group=A&admin=1
http://domain/contacts/A/1
http://domain/contacts.asp?group=B&admin=0
http://domain/contacts/B/0
,但我还是想要
http://domain/contacts.asp
重定向到
http://domain/contacts
(保留任何随机参数,如contacts.asp?view=all完整)。我必须如何修改上述内容?@penguinegg您不会修改上述内容,这是一件完全不同的事情。上述规则仅适用于URI
/contacts.asp
/users.asp
,其他什么都不适用。您必须为此制定单独的规则。这与您的CakePHP重定向问题无关。
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
RewriteRule ^contacts\.asp$ http://domain/contacts [L,R=301]
RewriteRule ^users\.asp$ http://domain/users [L,R=301]