1. 苏葳的备忘录首页
  2. 软件

WordPress的URL设置在Nginx上的404冲突

nginx wordpress 404404是什么?除了是方校长在武汉大学讲课时的教室门牌号码,还是网站返回的一个HTTP状态码。这个状态码告诉用户,服务器不能正确响应用户的请求,找不到该页面。Nginx在安装时包含了名为404.html和50x.html的两个网页,作为默认设置下对404错误及500、502、503、504等错误的返回内容。在Nginx配置文件中error_page指令指定这两个页面响应相应的错误码。站长可以自行设计这两个页面用来为用户提供更友好的错误信息。

如果WordPress博客建设在Nginx服务器上,那么页面的URL设置就有些讲究了。对于大多数博客,推荐的设置是网站名+分类名+文章名这样格式的URL。这样能为浏览者提供清晰的层级信息。文章名作为URL也对SEO有一定好处。然而,不要忘了互联网的西方基因。如果你有一个中文博客,那么一定知道中文出现在浏览器地址栏里是需要转码的。对于浏览者来说,看到的是一串乱字符,难以分辨这串乱字符跟一些垃圾网站地址的区别。当然一些浏览器使用了一些技术可以正确显示中文。但是,通常的建议是不要尝试这些尚未标准化的东西,尤其是作为搜索引擎收录关键标识的URL。

所以许多中文博客作者考虑用标题的英文甚至拼音来作为URL地址,谷歌更喜欢英文,百度则对拼音的辨识度更高。有不少WordPress插件可以自动把中文标题翻译成英文或拼音作为文章的Slug。这样就会遇到另一个问题。由于两种语言的巨大差异,导致可能中文里很短的一句话,在英文里需要翻译成长长的句子。拼音对国人更加友好,然而与英文类似,一个仅占两个字母位置的汉字翻译成拼音可能需要6个英文字母以上。同样会造成URL的冗长。所以,直接放弃标题与URL的关联,拿文章ID作为URL就能省去这些麻烦事儿了。

WordPress的文章ID,在手工发布时,并不是连续的,因为WordPress有文章草稿和版本等内容需要一并保存。但在调用WP的API批量插入文章时,往往可以产生连续的ID。无论哪种情况,一旦用文章ID作为URL的结束部份,并且这个ID值正好排到了404的话,有趣的事情就出现了。Nginx将返回哪个页面作为404.html这篇文章的内容呢?

由于404.html是Nginx上的一个静态页面,通常在配置文件中这个错误响应页面有更高的优先级。但是,无论谁屏蔽了谁,这都是我们不希望发生的事情。那么解决方法有两种,第一种是把静态的404.html页面重命名,另一种就是让WordPress跳过那个倒霉的ID。把404.html重命名其实非常容易,对于Nginx来说,它就是error_page指向的一个页面而已。但是如果修改了名字,那么在404页面出现时,URL里显示的就不再是404.html,这似乎不太合乎习惯。

那么我们就让WordPress跳过404这个文章ID,很简单,备份这篇ID为404的文章,删除它,然后重新发布就可以了。ID数字的取值区间非常大,以至于WordPress不会考虑去重用空闲的ID。那么,新的ID会不会改变这篇文章在博客列表里的先后顺序呢?只要我们记得把文章的发表时间设置成原先的发表时间,那么在博客展示时,这篇具有不同寻常的大ID数字的文章还是会在原来位置。

事实上,让WordPress的文章优先级高于Nginx系统里的404.html往往也不会有什么问题。因为出于用户体验优化的目的,很多WordPress设置里在需要返回404页面的时候,都转向到另外一些用户可能会关心的页面。在用户的正常浏览过程中,Nginx系统原本的404.html其实已经很少有抛头露面的机会了。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/1789.html

发表评论

您的电子邮箱地址不会被公开。