该脚本将从example.com/photo.php?id=123
或example.com/photos/123
等网址调用,具体取决于是否启用了漂亮的网址。
如果照片#123不存在,对example.com/photos/123
的请求应该抛出404错误。但是,example.com/photo.php?id=123
呢?
答案 0 :(得分:3)
您应该同时处理...?id=123
和.../123
个网址,因为它们相同 - 它们只是形式有点不同。
是的,您应该抛出 404 - Not Found 错误导致给定资源不存在。但是,404页面看起来不应该像:
像404找不到 - 你是@#$ @#$ @!
...photo.php
这样的网址404 应包含建议资源列表(用户可能想要访问的不同照片),某种搜索表单 - 换句话说:它应该是一个页面,允许我做一些事情而不是只是抛出错误信息。
答案 1 :(得分:3)
相关RFC为2616,特别是status codes,requests和URIs上的部分。具体来说,查询字符串被视为URI的部分,因此404
是正确的响应,因为它意味着:
服务器找不到任何东西 匹配Request-URI。
如果您知道照片已被永久删除,则可以返回410
。
我不会返回200
并说“找不到结果。”
答案 2 :(得分:1)
这取决于我想。
如果photo.php?id=123
是一个显示id为123的照片的页面,那么是的,它应该抛出404. 404意味着在预期找到资源时找不到资源 - 这在语义上是正确的
然而,由于photo.php?id=123
的语义意图很可能是一个页面正在搜索以获取ID为123的照片,那么返回200的完全正确并附上一条消息,说明没有返回任何结果。
最终,它并没有产生太大的差异。我不太熟悉HTTP响应代码如何影响搜索引擎索引页面的方式,但我怀疑404不会以相同的方式编入索引。如果没有任何内容可以显示,您可能不希望页面被编入索引。
TL; DR我会抛出404。
答案 3 :(得分:0)
是的,如果它从未存在过,你应该抛出404:
服务器未找到与Request-URI匹配的任何内容。没有说明该病症是暂时的还是永久性的。
但如果以前存在过,你应该回答410:
服务器上不再提供所请求的资源,并且不知道转发地址
答案 4 :(得分:0)
我认为你应该抛出404.这可以很容易地使用.htaccess文件,
希望有所帮助,