2010-08-27 49 views
5

该脚本将从example.com/photo.php?id=123example.com/photos/123这样的URL中调用,具体取决于是否启用了漂亮的URL。如果照片#123不存在,我应该向/photo.php?id=123这样的请求扔404吗?

如果照片#123不存在,则向example.com/photos/123发出的请求应该会引发404错误。但是,example.com/photo.php?id=123呢?

+0

404是您唯一的失败处理选项?没有办法妥善处理不存在的图像,例如重定向到'example.com/photo.php'? – bta 2010-08-27 17:56:30

+0

当然,正确的做法是让它成为一个优雅的404 ...类似于http://stackoverflow.com/foo – JanC 2010-08-27 18:07:02

回答

3

相关的RFC是2616,特别是status codes,requestsURIs的部分。具体而言,查询字符串被认为是部分URI的,所以404是因为这意味着适当的响应:

服务器没有找到任何匹配 Request-URI中。

如果您知道照片已被永久删除,您可能会返回410。我不会返回200并说“找不到结果”。

1

这取决于,我想。

如果photo.php?id=123是一个显示ID为123的照片的页面,那么是的,它应该会抛出404错误。404意味着在预期找到资源时找不到资源 - 这在语义上是正确的。

然而,在奇数的机会,你的photo.php?id=123语义意图是为它是一个网页与123 id的照片搜索,那么这是完全正确的一条消息说,没有结果返回200回。

最终,它没有产生巨大的差异。我不太了解HTTP响应代码如何影响搜索引擎索引页面的方式,但我怀疑404不会以相同的方式获得索引。如果没有可显示的内容,您可能不希望页面被索引。

TL; DR我会抛出404

+0

“最终,它不会产生巨大的差异。”它适用于搜索引擎。我不是专家,我不知道哪个扩展,但是如果您总是返回一个200相同的内容,您有多个页面指向相同的内容。我认为这是坏的。 – 2010-08-27 18:08:42

0

是的,你应该抛出一个404,如果它从来没有存在过:

服务器没有找到任何匹配的请求URI。没有迹象表明病情是暂时的还是永久性的。

但如果它之前就已经存在,你应该回应410:

请求的资源不再可用在服务器上,并没有转发地址是知道

Status Code Definitions

+0

该链接确认404确实适用于整个URI,包括查询字符串。 我害怕404上的photo.php?id = 123会吓唬浏览器加载photo.php?id = 334,但似乎并非如此。 – 2010-08-27 18:10:43

0

我认为你应该扔404。这可以很容易地使用.htaccess文件,

希望帮助,

3

你应该同时治疗...?id=123.../123网址相同,因为他们是平等的 - 他们只是有一点点不同的形式。

是的,你应该抛出一个404 - 未找到给定资源不存在的错误原因。然而,404页不应该看起来像:

404找不到 - 你是@#$ @#$ @!

...photo.php网址应包含建议的资源列表(不同的照片,用户可能希望访问),某种搜索表单 - 换句话说:它应该是一个页面,让我做一些事情,只是抛出错误信息。

相关问题