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

时间:2012-08-29 02:48:27

标签: apache cakephp mod-rewrite redirect url-rewriting

我正在尝试重定向域名上的旧asp页面,以便它们链接到CakePHP版本上的各自页面(使用1.3)。域名是一样的。正在添加这些重定向,因此搜索引擎的结果将转到新的Cake页面。

我的/.htaccess文件中有一堆Redirect 301(app / .htaccess和app / webroot / .htaccess是默认值)。

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]

   Redirect 301 /contacts.asp http://domain/contacts
   Redirect 301 /users.asp http://domain/users
</IfModule>

但出于某种原因,当我访问任何网址来测试重定向时,它会附加一个额外的查询字符串参数。例如:

转到:http://domain/contacts.asp会产生http://domain/contacts?url=contacts.asp

因此重定向正在运行,但它附加了url查询字符串参数。我不想完全删除所有查询字符串参数,因为一些旧的asp链接有查询字符串参数,我也想传递给相应的Cake页面。

我认为“url”查询字符串参数来自app/webroot/.htaccess文件,如下所示:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

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

1 个答案:

答案 0 :(得分:1)

这看起来像mod_rewrite和mod_alias相互踩踏的情况。当应用Redirect指令时,URI处理管道不会结束,它会继续通过管道并且mod_rewrite会执行它的操作。不幸的是,最终的结果并不总是你想要的。您可以坚持使用mod_rewrite并删除Redirect指令。

您可以删除2 Redirect指令,并将这些RewriteRule 上面的<{1}} 添加到app/webroot

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