Livewire文件上传报401错误:URL签名验证失败求助
解决Livewire文件上传401错误及URL异常拼接问题
问题根源出在你的.htaccess配置上,错误的Rewrite规则导致URL生成逻辑混乱,进而引发签名验证失败。
你的当前规则:
RewriteRule ^(.*)$ /index.php?/$1 [L,QSA]
这种写法会把请求路径作为查询参数传递给index.php,比如访问/livewire/upload-file时,实际会变成/index.php?/livewire/upload-file。Laravel处理这种URL时,会错误地把路径部分当成查询参数的一部分,最终生成异常的签名URL(像你调试中看到的https://my-project.dev/livewire/upload-file?/livewire/upload-file&expires=1674038186),自然过不了签名验证,触发401错误,同时还会导致登录后URL出现多余的拼接内容。
解决步骤
把.htaccess里的RewriteRule替换成Laravel标准配置:
Options -Indexes RewriteEngine On # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L]
如果不想用完整的标准配置,至少把原来的RewriteRule改成:
RewriteRule ^(.*)$ /index.php/$1 [L]
为什么这样改?
修改后的规则会把请求路径通过PATH_INFO传递给index.php,而不是塞进查询参数里,Laravel能正确解析URL结构,生成正常的签名链接,签名验证自然能通过,Livewire上传的401错误和URL异常拼接问题都会消失。
另外,别再修改vendor里的abort_unless代码了,那只是临时绕开问题,不仅有安全风险,下次更新依赖后还会失效,修改.htaccess才是根本解决办法。
内容的提问来源于stack exchange,提问作者ThurstonLevi
相关产品推荐
相关产品推荐

