Laravel+Twilio浏览器通话获取Capability Token遇404错误求助
问题描述
运行一个Laravel+Twilio浏览器通话项目,部署在WordPress站点的子目录中,目前页面可正常访问,但右侧状态区域显示:
Requesting Capability Token...
Could not get a token from server!
开发者工具中发现请求路径/twilio-audio-call-laravel/token返回404错误,修改目录名称后问题仍存在。当前web.php路由配置如下:
Route::get('/index',[Controller::class, 'index']); Route::get('/',[Controller::class, 'index']); Route::post('/voice',[Controller::class, 'voice']); Route::post('/token',[Controller::class, 'token']);
作为Laravel和Twilio新手,需要实现WordPress页面呼叫按钮+客服接听页面的浏览器通话功能,不确定是目录问题还是其他原因导致404,寻求解决方法。
解决步骤
1. 给Laravel路由添加子目录前缀
由于项目部署在WordPress的twilio-audio-call-laravel子目录下,需要给所有路由加上对应前缀,确保请求路径匹配。修改routes/web.php:
Route::group(['prefix' => 'twilio-audio-call-laravel'], function () { Route::get('/index',[Controller::class, 'index']); Route::get('/',[Controller::class, 'index']); Route::post('/voice',[Controller::class, 'voice']); Route::post('/token',[Controller::class, 'token']); });
修改后,/token路由会变成/twilio-audio-call-laravel/token,和前端请求路径一致。
2. 调整服务器重写规则
Apache环境
确保Laravel项目根目录的.htaccess文件正确处理子目录重写,内容如下:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # 处理授权头 RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 移除末尾斜杠 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # 转发请求到前端控制器 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
Nginx环境
在Nginx配置文件中添加子目录的路由规则:
location /twilio-audio-call-laravel { try_files $uri $uri/ /twilio-audio-call-laravel/index.php?$query_string; }
3. 验证前端请求路径
找到项目中请求Token的JS代码,确认请求URL为/twilio-audio-call-laravel/token,如果之前是相对路径或错误的绝对路径,需修正为匹配前缀后的路径。
4. 刷新Laravel路由缓存
- 本地环境:运行
php artisan route:list查看路由列表,确认POST /twilio-audio-call-laravel/token存在。 - 生产环境:执行
php artisan route:clear清除路由缓存,确保新路由生效。
5. 避免WordPress路由干扰
WordPress的固定链接规则可能拦截Laravel子目录的请求,可按以下方式处理:
- 临时将WordPress固定链接设置为「朴素」模式测试。
- 若问题解决,修改WordPress根目录的
.htaccess,在开头添加规则让WordPress跳过Laravel子目录的请求:
RewriteCond %{REQUEST_URI} ^/twilio-audio-call-laravel/ RewriteRule ^ - [L]
内容的提问来源于stack exchange,提问作者user1265276
相关产品推荐
相关产品推荐

