Maison > Article > développement back-end > 访问编码后的中文URL返回404错误的解决方法,url404_PHP教程
昨天做一个项目,其中有一个需求是每一张图片对应一小段文字对图片的说明,普通的做法是新建一个表然后把图片名与说明文字都记录到数据库内。仔细考虑后感觉这个应用不要数据库也能完成,我实现的方案是把说明文字URLENCODE后当做文件名,这样当我读取文件的时候再把文件名URLDECODE就可以后驱图片的文字说明了。
可是通过浏览器访问图片时却提示找不到文件,如有一张图片的说明文字为“琼台博客”,URLENCODE后生成的文件名如下
于是我通过浏览器访问图片,提示找不到
仔细看了一下,发现浏览器访问的时候自动把文件名给转回中文了
火狐
chrome
IE
Safari
IE与Safari从地址栏上没有看出转为汉字,但也同样都提示找不到文件。但我感觉应该是它请求的时候也都自动转了,只不过地址栏上的没有显示转换后的。从Nginx的访问记录看访问图片时的请求情况
请求URL处理没发现什么异常,最后通过反复研究编码后的文件名,发现都是由百分号与字母数字组成,我感觉应该是浏览器在遇到百分号时可能会做些其它转换处理了,所以导致浏览器访问URLENCODE后的文件提示找不到。
于是我把所有URLENCODE后的文件名里的百分号都用下划线替换
替换为
重新使用浏览器访问,问题解决
如要获取图片的文字说明,直接把文件名的“_”替换回"%”再使用URLDECODE即可。
最后需要注意的是,Linux下文件名跟Win系统一样都有长度限制,目前最常用的格式为ext3,这中格式允许255个字符长度,扣除大约5个作为拓展名后大约剩余250个长度纯文件名,而一个汉字经过URLENCODE后的长度为9个,因此最大可以编码27个汉字做为文件名。
虽然这种方式存储的汉字比较少,但可以利用一些加密方法获得较短的一串密文,再把这段密文URLENCODE即可,具体实现方式我就不一一举例,动手做做思考一下吧!
404是一种HTTP状态码,HTTP 404 状态码的出现意味着链接指向的网页不存在,即原始网页的URL失效,这种情况经常会发生,特别是对于大型网站来讲,很难避免,比如说:网页URL生成规则改变、网页文件更名或移动位置、导入链接拼写错误、编辑或程序工作人员疏忽等,导致原来的URL地址无法访问;当Web 服务器接到类似请求时,会返回一个404 状态码,告诉浏览器要请求的资源并不存在。导致这个错误的原因一般来说,有:网站本身问题导致:网页URL本身已经发生变化,而前台页面没有及时更新;网页本身或网页文件位置发生改变,而没有及时在后台更新;外部链接拼写出错;网站内容管理员或程序管理员在处理URL上没有考虑周全,比如一些地方如果加入了链接属性导致URL不能正常访问。用户网络环境导致:无法在所请求的端口**问该网页URL地址。Web服务扩展锁定策略阻止本请求。MIME映射策略阻止本请求。对于网页内容比较少的小型网站管理员来讲,可以用死链接检测工具“xenu.exe”来对网页死链接进行检测,发现并及时处理错误链接信息;对于内容较多的大中型网站管理员,使用上面的死链接检测工具可能会消耗很多时间,可以关注每天网站日志文件中的用户状态码情况,发现并及时解决404错误问题。制作友好的404错误页面,提醒用户访问出错信息,引导用户进行首页或目录查找,提供站内查找功能或网站管理员联系方式。对于SEO人员(搜索引擎优化工作者)来讲,建议参考“404错误是否会对网站造成影响”一文获取更多信息。普通用户:尝试更换浏览器或清理浏览器缓存(排除由于浏览器控件或恶意插件等引起无法访问的情况)查看目前用户是否具有网络链接权限(部分计算机可能被设置限时或限制进行网络链接)检测自身网络环境是否正常(可以通过安全检测或杀毒软件进行检测)检测计算机中是否有相关限制程序运行(部分计算机可能被软件设置控制网络链接权限,需密码才能链接)
404页面就是当用户输入了错误的链接时,返回的页面。 404页面的目的是:告诉浏览者其所请求的页面不存在或链接错误,同时引导用户使用网站其他页面而不是关闭窗口离开。 404对seo的影响 自定义404错误页面是增强用户体验的很好的做法,但在应用过程中往往并未注意到对搜索引擎的影响,譬如:错误的服务器端配置导致返回“200”状态码或自定义404错误页面使用Meta Refresh导致返回“302”状态码。正确设置的自定义404错误页面,不仅应当能够正确地显示,同时,应该返回“404”错误代码,而不是 “200”或“302”。虽然对访问的用户而言,HTTP状态码究竟是“404”还是“200”来说并没有什么区别,但对搜索引擎这则是相当重要的。 搜索引擎蜘蛛在请求某个URL时得到“404”状态回应时,即知道该URL已经失效,便不再索引该网页,并向数据中心反馈将该URL表示的网页从索引数据库中删除,当然,删除过程有可能需要很长时间;而当搜索引擎得到“200”状态码时,则会认为该url是有效的,便会去索引,并会将其收录到索引数据库,这样的结果便是这两个不同的url具有完全相同的内容:自定义404错误页面的内容,这会导致出现复制网页问题。轻则被搜索引擎降权,重则会K掉网站。 如何实现一个良好的404页面 改变服务器默认错误页面就可以达到效果。下面是一些可以使得访客轻松实现正常访问的建议。
遵循的理念
提供简明的问题描述,消除访客的挫败感。 提供合理的解决方案,辅助访客完成访问目标。 提供个性化的友好界面,提升访问体验。
使用指南
实现方式(按照从简单到复杂的顺序排列): 使得访客转到某个地方而不是后退。 页面包含该站点重要部分的链接,如主页或站点地图。不要仅仅告诉他们检查拼写。使用文本的链接替代图片,因为有许多访客不会想到点击这个图片。 例子:我们的站点有一个主页的返回链接。这是实现友好反馈的最低限度。 此外,我们还会考虑,在有效的帮助信息不足的情况下,如何通过访客的反馈弥补错误。 需要包括一个指向网站管理员的email链接,或者一个用于提交丢失链接的表格。 相对于发送email,访客更喜欢使用提交表格。 加入一个搜索框用于搜索站点。 例:MSN在所有页面的底部都有一个搜索框,同时也链向站点的重要部分。 在站点中列出接近于访客期望页面的链接,用于推测访客正在寻找的页面。 你不需要采纳上述所有的建议,但是这些建议一致服务于使得访客更愿意停留在你的站点的目的。 合理的404错误页面至此即可以完成了,这将给访客提供许多有价值的信息。 404错误页面的设置方法: 1. 对于存在的网页内容由于路径改变而导致访问不了时,可在IIS 中定义404错误指向一个动态页面,在页面里面使用301永久重定向跳转到新的地址,此时服务器返回301状态码。 2、设置404指向一个设计好的html 文件,此时页面返回的404状态码。 现在的idc提供商基本都提供404设置的功能,直接上传文件设置即可。在IIs中设置方法:打开IIS管理器-->点击要设置自定义404的网站的属性-->点击自定义错误选项-->选中404页-->选中并打开编辑属性-->设置成 URL --> URL 里填写“/err404.html”-->按确定退出再把做好的err404.html 页面上传到网站根目录下。此处在“消息类型”中一定要选择“文件”或“默认值”,而不要选择“......余下全文>>