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
相关产品推荐
相关产品推荐

