使用404作为php网站的基础是不正确的形式?

时间:2012-07-13 01:31:28

标签: php http-status-code-404

(很抱歉,如果这是一个重复的问题,我很难想到如何搜索它,并且想出了关于如何使404工作的成千上万的结果。)

我正在尝试构建一个大致遵循以下形式的PHP网站:http://www.example.com/user/MrPoopPants

我想知道最好的解决方案。在尝试弄清楚URL缩短程序如何重定向时,一个网站建议通过404发送每个请求,并让404错误页面使用$_SERVER['REQUEST_URI']评估数据

有了这个,您可以preg_split,并询问数据库是否有名为MrPoopPants的用户,然后使用基于包和数据库的PHP构建您的站点。

我不喜欢这两个问题:我在网站的每个页面使用404,这看起来真的很糟糕;我也依赖于整个网站的单个php文件,这看起来很糟糕。

最好的方法是什么?编辑:也就是说,我意识到这是一个不好的做法,解决方案是什么?如何在不将其重定向到404的情况下检测URL信息?如何设置页面,以便在/user/manboy时{}知道让/user/user.php读取URL并构建页面?

4 个答案:

答案 0 :(得分:1)

您尝试执行的操作可以通过URL重写来完成。虽然您应该真正研究PHP框架,但您可以自己重写。

它允许您创建http://mydomain.com/user/1之类的网址,您可以在服务器上处理这些网址,并将其重写为:http://mydomain.com?q=user/1

然后,您可以使用以下代码访问代码中的URL: $url = $_GET['q'];

http://www.addedbytes.com/for-beginners/url-rewriting-for-beginners/

答案 1 :(得分:1)

您实质上是在询问网址重写。可以找到一个优秀的初学者教程,解释mod_rewrite的所有重要位和字节 here

处理重写请求的PHP部分恐怕是PHP 101,没有人可以简单地“解释”给你。您需要针对特定​​问题提出具体问题,以便人们能够真正帮助您。

答案 2 :(得分:0)

404错误并不是您用来使网站正常运行的工具。相反,只能将其视为当客户端要求的内容无法找到时发送给客户端的响应。

更好的处理方法是设置您的Web框架,以便您拥有一个脚本,该脚本可以响应http://www.example.com/user/_____形式的任何URL,其中任何内容都跟在最终/之后。然后,您可以编写代码以在数据库或其他任何内容中查找用户名,并生成所需的结果页面。

答案 3 :(得分:0)

此处有关重写规则的其他答案绝对正确。但是,过去我遇到过一种情况,一台服务器在一个主机名下托管了大量不同的应用程序,我必须完全按照你的建议进行操作。

基本上,由于共享IIS服务器上的重写配置被锁定,我将404页面设置为PHP脚本。此脚本将在数据库中查找尝试的URL,以查看是否将其设置为重定向到其他位置。

现在关键是404从未发送给客户端。客户端获得了带有Location标头的301或302。客户从来不知道它已经打了404页,因为它没有作为一个页面返回。 (当然,如果脚本在数据库中找不到重定向条目,它将返回正确的404页面和状态代码。)

简而言之,虽然非传统,但如果您已经摆脱了正常的选择,那么这种方法没有任何问题,并且对您对客户的反应非常谨慎。