使用404作为php网站的基础是不合适的形式吗


Is it improper form to use a 404 as a basis for a php website?

(很抱歉,如果这是一个重复的问题,我很难思考如何搜索它,刚刚得到了数千个关于如何使404工作的结果。)

我正试图建立一个PHP网站,大致遵循以下形式:http://www.example.com/user/MrPoopPants

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

有了它,你可以只需要preg_split,并询问数据库是否有一个名为MrPoopPants的用户,然后使用基于includes和he数据库的PHP构建你的网站。

我不喜欢的两个问题是:我对网站上的每个页面都使用404,这似乎是一件非常糟糕的事情;我还依赖于整个网站的一个php文件,这看起来很糟糕

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

您实际上是在询问URL重写的问题。对于初学者来说,解释mod_rewrite的所有重要位和字节的优秀教程可以在此处找到

处理重写请求的PHP部分恐怕是PHP 101,没有人能简单地向您"解释"。你需要对一个非常具体的问题提出一个具体的问题,这样人们才能真正帮助你。

您试图做的事情可以通过URL重写来完成。尽管您确实应该研究PHP框架,但您可以自己进行重写。

它允许您创建类似http://mydomain.com/user/1的URL,您可以通过将其重写为:http://mydomain.com?q=user/1来在服务器上处理这些URL。

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

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

404错误并不是一个真正用于使网站正常工作的工具。相反,只将其视为在找不到客户要求的内容时发送给客户的响应。

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

这里关于重写规则的其他答案是绝对正确的。然而,我在过去遇到过一种情况,一台服务器在一个主机名下托管了大量不同的应用程序,我不得不按照你的建议去做。

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

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

简言之,尽管这种方法是非传统的,但如果你已经尝试了正常的选择,并且对如何回应客户很谨慎,那么这种方法就没有错。