这是我的第一篇文章,所以对我很轻松。
基本上我正在我的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,但我希望安全起见......)
答案 0 :(得分: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次尝试后会切断。
答案 1 :(得分: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;