2

这是我的第一篇文章,所以请放轻松。

基本上,我在我的 htaccess 文件中进行了一些重写,以将我编造的搜索友好 URL 更改为实际 URL,并且它们大部分都在工作。例如这个:

http://www.negativeworld.org/7849/news/nintendo-download-for-may-24-2012

会变成这样:

http://www.negativeworld.org/article.php?id=7849

很好……如果那篇文章存在的话。如果文章不存在,php代码使用这个:

header("Location: boarderror.php");
exit;

将用户带到 boarderror.php。如果用户直接在 article.php 上到达那里并且 id 不好,这很好用,但是当我尝试从搜索友好的 url 进行 htaccess 重定向并且 id 不好时,htaccess 重定向会在给出之前挂起一段时间我这条消息:“页面没有正确重定向”。

我想要的是当 id 错误时它可以转到我的 boarderror.php 页面。所以基本上我希望我的 htaccess 页面采用服务器友好的 URL,切换到真正的 URL,然后……然后放手,PHP 将从那里获取它。这是我进行切换的 htaccess 行:

RewriteRule ^([0-9]+)/(news|review|editorial|podcast)/(.*)$ /article.php?id=$1 [L]

我究竟做错了什么?(顺便说一句,我意识到如果我正确设置了所有搜索友好的 URL,那么无论如何都不应该有错误的 id,但我想安全起见......)

4

2 回答 2

1

你的想法没有错。对于错误的 ID,可以进行双重重定向。问题是第二次重定向是如何发生的。尝试

header("Location: http://www.negativeworld.org/boarderror.php");

或者

header("Location: /boarderror.php");

随着您的重定向,浏览器正在尝试http://www.negativeworld.org/9999/news/boarderror.php(9999 是错误的 ID),它陷入了无限的重定向循环,浏览器在 10 次尝试后切断。

于 2012-10-20T23:38:44.463 回答
0

重定向规则很好,问题出在您的标头函数调用中。当您仅提供文件名时,标头重定向会将用户发送到同一文件夹中的文件,就像仅使用文件名创建 html 链接一样。

假设我尝试加载http://www.negativeworld.org/99999/news/nintendo-download-for-may-24-2012并且该 ID 无效。在这种情况下,它会将用户发送到http://www.negativeworld.org/99999/news/boarderror.php,这会再次触发重定向并陷入无限循环(或者如果浏览器不够智能,则会陷入无限循环停止一遍又一遍地请求相同的 URL)。

根据RFC 2616,位置标头应提供绝对 URI,因此您应该执行以下操作:

header("Location: http://www.negativeworld.org/boarderror.php");
exit;
于 2012-10-20T23:37:00.937 回答