0

我正在尝试重定向域名上的旧 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>

但是由于某种原因,当我转到任何 url 来测试重定向时,它会附加一个额外的查询字符串参数。例如:

前往: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

4

1 回答 1

1

这看起来像是 mod_rewrite 和 mod_alias 相互重叠的情况。URI 处理管道不会在Redirect应用指令时结束,它会继续通过管道,而 mod_rewrite 会做它的事情。不幸的是,最终结果并不总是你想要的。您可以坚持使用 mod_rewrite 并删除Redirect指令。

您可以删除 2 个Redirect指令,并将这 2个指令添加到将请求映射到的RewriteRule指令之上app/webroot

RewriteRule ^contacts\.asp$ http://domain/contacts [L,R=301]
RewriteRule ^users\.asp$ http://domain/users [L,R=301]
于 2012-08-29T03:38:48.430 回答