URL无PHP扩展名时Dropzone上传触发Apache 406 Not Acceptable错误
Dropzone无.php扩展名URL上传报406 Not Acceptable的解决经历
最近用Dropzone实现文件上传功能时,踩了个挺棘手的坑:访问集成插件的页面时,如果URL不带.php扩展名,往Dropzone区域拖放文件就会触发406 Not Acceptable错误;但只要URL带上.php(或者.html)扩展名,上传功能就完全正常。
尝试过的无效方案
一开始我试了好几种常规方法,都没解决问题:
- 在服务器配置里添加了
AddHandler type-map var和MultiviewsMatch Handlers Filters参数 - 在
.htaccess里关闭了mod_security模块:
<IfModule mod_security.c> SecFilterEngineOff SecFilterScanPOSTOff </IfModule>
这些操作都没起作用,只有切换到带.php扩展名的URL,上传才能恢复正常。
关键发现
后来我仔细对比了两种URL下的请求响应头,发现了核心差异:
- URL带
.php时,服务器响应头的Content-Type是text/html; charset=UTF-8 - URL不带
.php时,响应头的Content-Type变成了text/html; charset=iso-8859-1
而Dropzone发送的请求头里,Accept始终是application/json,这应该是导致406错误的根源——服务器返回的编码格式不符合Dropzone的预期。
最终解决方法
最后我在.htaccess里添加了一段重写规则,问题就彻底解决了,现在不带.php扩展名的URL也能正常使用Dropzone上传了:
<IfModule mod_rewrite.c> Options +FollowSymLinks -MultiViews RewriteEngine on RewriteCond %{REQUEST_URI} !-d RewriteCond %{REQUEST_URI}\.php !-f RewriteRule ^([^\.]+)$ $1.php [NC,L] </IfModule>
内容的提问来源于stack exchange,提问作者BlueSun3k1
相关产品推荐
相关产品推荐

