三明市网站建设_网站建设公司_前端工程师_seo优化
2026/1/5 22:30:05 网站建设 项目流程

1.500错误

500

Error Message:Undefined array key "REQUEST_URI"

500错误的原因是中间件直接访问了 $_SERVER['REQUEST_URI'] ,但在Octane环境中这个全局变量可能没有被正确设置。需要修改中间件,使用Laravel Request对象来获取请求URI。# 500错误分析:Undefined array key "REQUEST_URI"

解决方案

修改 SetLocaleFromSession.php 中间件,使用Laravel Request对象的方法来获取请求URI,而不是直接访问 $_SERVER 全局变量。

### 具体修改步骤
1. 修改文件 : d:\beikeshop\www\app\Http\Middleware\SetLocaleFromSession.php
2. 修改第53行 :
- 原代码: $uri = $_SERVER['REQUEST_URI'];
- 修改为: $uri = $request->getRequestUri();

完整修改后的 getLocaleFromUrl 方法 :修改后完整代码

<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; class SetLocaleFromSession { /** * Handle an incoming request. * * @param Request $request * @param Closure $next * @return mixed */ public function handle(Request $request, Closure $next): mixed { // 优先从请求头中获取 'locale' $localeFromHeader = $request->header('locale'); if ($localeFromHeader && in_array($localeFromHeader, languages()->toArray())) { $locale = $localeFromHeader; } else { // 如果请求头没有语言,尝试从 URL 中提取 $localeFromUrl = $this->getLocaleFromUrl($request); if ($localeFromUrl) { $locale = $localeFromUrl; } else { // 如果都没有从请求头或 URL 中获取到语言,使用会话中的语言 $locale = session('locale'); if (!$locale || !in_array($locale, languages()->toArray())) { // 如果会话中没有有效语言,使用系统默认语言 $locale = system_setting('base.locale'); } } } // 设置语言 App::setLocale($locale); session(['locale' => $locale]); return $next($request); } /** * 从原始请求 URL 中解析出语言代码 * * @return string|null */ /* private function getLocaleFromUrl(Request $request): ?string { $uri = $_SERVER['REQUEST_URI']; // 提取路径部分 $path = parse_url($uri, PHP_URL_PATH); $segments = explode('/', trim($path, '/')); // 如果路径的第一个部分是有效的语言代码,返回该语言代码 if (count($segments) > 0 && in_array($segments[0], languages()->toArray())) { return $segments[0]; } // 还要从url中的 locale 获取,兼容 app 那边使用 webview 访问 locale传参 $localeFromUrl = $request->query('locale'); if ($localeFromUrl && in_array($localeFromUrl, languages()->toArray())) { return $localeFromUrl; } return null; } */ private function getLocaleFromUrl(Request $request): ?string { // 使用Laravel Request对象获取URI,而不是直接访问$_SERVER $uri = $request->getRequestUri(); // 提取路径部分 $path = parse_url($uri, PHP_URL_PATH); $segments = explode('/', trim($path, '/')); // 如果路径的第一个部分是有效的语言代码,返回该语言代码 if (count($segments) > 0 && in_array($segments[0], languages()->toArray())) { return $segments[0]; } // 还要从url中的 locale 获取,兼容 app 那边使用 webview 访问 locale传参 $localeFromUrl = $request->query('locale'); if ($localeFromUrl && in_array($localeFromUrl, languages()->toArray())) { return $localeFromUrl; } return null; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询