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

URL重写为/language,fr格式后,如何获取语言参数fr?

问题:无法获取URL重写后的language参数值

原本正常的URL是:

http://localhost/test/boutique/index.php?language=fr

但在未配置重写规则的情况下,URL变成了:

http://localhost/test/boutique/index.php/language,fr

这时候切换语言功能直接失效,用isset($_GET['language'])始终返回false,根本拿不到里面的fr值。我当前的代码逻辑如下:

if (!isset($_SESSION['language']) || isset($_GET['language'])) { 
    if (isset($_GET['language']) && !empty($_GET['language']) && $OSCOM_Language->exists($_GET['language'])) { 
        $OSCOM_Language->set($_GET['language']); 
    } 
    $_SESSION['language'] = $OSCOM_Language->get('code'); // default language 
}

请问该怎么从language,fr里提取出fr这个值?


别担心,这种情况是因为参数没有以标准GET方式传递,而是变成了URL中脚本路径的一部分(也就是PATH_INFO),我们可以通过下面几种方法来提取fr值:

方法一:直接解析$_SERVER['PATH_INFO']

PHP的$_SERVER['PATH_INFO']变量会自动存储URL中脚本文件名之后的路径内容,这里就是/language,fr。我们可以对它做简单分割处理:

$language_code = '';
// 先检查PATH_INFO是否存在且不为空
if (!empty($_SERVER['PATH_INFO'])) {
    // 去掉开头的斜杠,再按逗号分割字符串
    $path_segments = explode(',', ltrim($_SERVER['PATH_INFO'], '/'));
    // 确保分割后有两个部分,且第一个是我们要的参数名language
    if (count($path_segments) === 2 && $path_segments[0] === 'language') {
        $language_code = $path_segments[1];
    }
}

// 接着修改你的原有逻辑,把$_GET['language']替换成$language_code来判断
if (!isset($_SESSION['language']) || !empty($language_code)) { 
    if (!empty($language_code) && $OSCOM_Language->exists($language_code)) { 
        $OSCOM_Language->set($language_code); 
    } 
    $_SESSION['language'] = $OSCOM_Language->get('code');
}

方法二:手动解析整个URL

如果你的环境里$_SERVER['PATH_INFO']不可用,也可以直接解析当前请求的URL:

$language_code = '';
// 获取当前请求的URI部分
$current_uri = $_SERVER['REQUEST_URI'];
// 解析URL,提取路径部分
$url_parts = parse_url($current_uri);

if (isset($url_parts['path'])) {
    // 去掉脚本文件的路径,只留下后面的参数部分
    $param_part = str_replace('/test/boutique/index.php', '', $url_parts['path']);
    $param_part = ltrim($param_part, '/');
    
    if (!empty($param_part)) {
        $path_segments = explode(',', $param_part);
        if (count($path_segments) === 2 && $path_segments[0] === 'language') {
            $language_code = $path_segments[1];
        }
    }
}

// 同样替换原有逻辑中的$_GET判断即可

小提醒

记得要做边界判断,比如检查分割后的数组长度、参数名是否正确,避免异常URL导致程序报错。另外如果后续能配置正确的URL重写规则,还是建议回到使用$_GET的方式,这更符合标准的HTTP参数传递规范。

内容的提问来源于stack exchange,提问作者Zigoto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:48:41