1

我在使用 htaccess 设置单页重定向时遇到了一些问题。目前我有一个 htaccess 文件:

RewriteCond %{SCRIPT_FILENAME} !-s
RewriteRule (.*) index.php?path=$1 [QSA,L]

然后是一组重定向,例如

Redirect 301 /oldpage.htm http://www.mydomain.com/new-page

但是我遇到的问题是,当我进入浏览器并输入旧 URL 时,我会被重定向到带有附加参数的 URL,例如:

“http://www.mydomain.com/new-page?path=oldpage.htm”

对于我的某些重定向,这似乎仍然有效,对于某些重定向,它会产生 404 错误。我还尝试使用 RewriteCond 和 Rewrite Rule 为那些我可以的页面编写更通用的捕获所有重定向,并且我遇到了同样的问题。

我认为其他一些规则一定会干扰我的重定向 - 我能看到的唯一一个可能会这样做的是上面的规则,但如果是这种情况,我被重定向到的 URL 不应该是

“http://www.mydomain.com/index.php?path=oldpage.htm”

谁能解释为什么将参数附加到 URL 以及如何阻止这种情况发生以便我的重定向工作?

干杯!

4

2 回答 2

0

因为你的 $1 in rewrite 规则

RewriteRule (.*) index.php [QSA,L] 试试这个

于 2012-10-03T11:13:15.557 回答
0

这是因为 mod_alias(Redirect指令)和 mod_rewrite(Rewrite*指令)都被应用于 URL 文件映射处理管道中的同一个 URI。为了防止这种情况发生,在这种情况下,您需要坚持使用其中一种。

您还希望首先应用重定向:

RewriteRule ^/?oldpage.htm$ http://www.mydomain.com/new-page [L,R=301]

RewriteCond %{SCRIPT_FILENAME} !-s
RewriteRule (.*) index.php?path=$1 [QSA,L]

您的index.php规则将捕获所有不是符号链接的 CGI 脚本的请求,因此,如果这确实是您的意图,那么几乎所有请求。否则,您可以通过以下方式让合法请求安然无恙:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

高于最后一条规则。

于 2012-10-03T17:52:38.347 回答