You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:45:46