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

URL重写后无法获取$_GET['language'],求.htaccess配置代码

解决URL重写后无法获取language参数的问题

嘿,我来帮你搞定这个URL重写的问题!你猜的没错,核心就是要通过.htaccess的重写规则,把路径式的language/fr映射成PHP能识别的$_GET参数。

第一步:先确认mod_rewrite已启用

首先得确保你的Apache服务器开了mod_rewrite模块——这是重写规则生效的基础。如果是本地环境(比如XAMPP/WAMP),打开httpd.conf找到LoadModule rewrite_module modules/mod_rewrite.so,去掉前面的#注释,重启服务器就行。

第二步:配置.htaccess规则

在你的boutique目录下创建或修改.htaccess文件,添加以下代码:

# 开启重写引擎
RewriteEngine On

# 跳过真实存在的文件和目录(避免误重写)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 把 index.php/language/xxx 转成 index.php?language=xxx
RewriteRule ^index.php/language/([a-z]{2})$ index.php?language=$1 [L,QSA]

规则细节解释:

  • RewriteEngine On:开启URL重写功能,必备项。
  • 两条RewriteCond:确保只对不存在的文件/目录生效,比如你真有个language文件夹的话,不会被规则干扰。
  • ^index.php/language/([a-z]{2})$:匹配以index.php/language/开头、后面跟2个小写字母的URL(比如fr、en),括号里的内容会被捕获成变量$1。
  • index.php?language=$1:把捕获到的语言代码作为language参数传递给index.php。
  • [L,QSA]:L表示匹配到这条规则就停止后续处理;QSA表示如果URL还有其他参数(比如index.php/language/fr?foo=bar),会保留并合并这些参数。

第三步:适配你的PHP代码

你的现有代码逻辑没问题,不过可以加个语言合法性校验,避免恶意输入:

session_start(); // 别忘了开启会话!

if (!isset($_SESSION['language']) || isset($_GET['language'])) {
    if (isset($_GET['language']) && !empty($_GET['language'])) {
        // 只允许预设的合法语言
        $allowedLangs = ['fr', 'en', 'es'];
        $lang = strtolower($_GET['language']);
        if (in_array($lang, $allowedLangs)) {
            $_SESSION['language'] = $lang;
        }
    } else {
        // 设置默认语言
        $_SESSION['language'] = 'fr';
    }
}

测试小提示

  • 用浏览器隐私模式测试,避免旧URL缓存影响结果。
  • 如果是线上服务器,要确认主机商允许使用.htaccess(部分共享主机需要在控制面板手动开启)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:45:58