(很抱歉,如果这是一个重复的问题,我很难思考如何搜索它,刚刚得到了数千个关于如何使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页面和状态代码。)
简言之,尽管这种方法是非传统的,但如果你已经尝试了正常的选择,并且对如何回应客户很谨慎,那么这种方法就没有错。