我正在尝试重定向域名上的旧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
查询字符串参数?
答案 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]