[英]Can I use PHP and/or htaccess to rewrite a URL but not redirect?
[英]How can I use a .htaccess rewrite to a page that has a php header redirect?
这是我的第一篇文章,所以对我轻松一点。
基本上,我正在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]
我究竟做错了什么? (顺便说一句,我意识到,如果我正确地设置了所有对搜索友好的网址,则无论如何都不会出现错误的ID,但是我希望安全起见……)
你的想法没错。 对于错误的ID,可以进行双重重定向。 问题是第二重定向如何发生。 尝试
header("Location: http://www.negativeworld.org/boarderror.php");
要么
header("Location: /boarderror.php");
通过重定向,浏览器正在尝试http://www.negativeworld.org/9999/news/boarderror.php
(错误的ID为9999),这陷入了无尽的重定向循环,浏览器在尝试10次后便被剪切。
重定向规则很好,问题出在您的标头函数调用中。 仅提供文件名时,标头重定向会将用户发送到同一文件夹中的文件,就像仅使用文件名创建html链接一样。
假设我尝试加载http://www.negativeworld.org/99999/news/nintendo-download-for-may-24-2012并且该ID无效。 在这种情况下,它将把用户发送到http://www.negativeworld.org/99999/news/boarderror.php ,它再次触发重定向并陷入无限循环(或者如果浏览器不够智能,也会陷入这种情况)停止一遍又一遍地请求相同的网址)。
根据RFC 2616 ,位置标头应提供绝对URI,因此您应执行以下操作:
header("Location: http://www.negativeworld.org/boarderror.php");
exit;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.