如何将.htaccess重写用于具有php标头重定向的页面?

时间:2012-10-20 22:01:56

标签: php .htaccess redirect rewrite

这是我的第一篇文章,所以对我很轻松。

基本上我正在我的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,但我希望安全起见......)

2 个答案:

答案 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;