在Discuz系统中实现URL大小写兼容访问,可通过以下两种方案实现:
一、服务器级解决方案(推荐方案)
1. Apache环境(.htaccess):
- <IfModule mod_speling.c>
- CheckCaseOnly on
- CheckSpelling on
- </IfModule>
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteRule ^(.*)$ index.php?$1 [L,QSA]
复制代码
2. Nginx环境(站点配置):
- location / {
- try_files $uri $uri/ /index.php?$args;
- ignore_invalid_headers off;
- # 添加大小写不敏感匹配
- rewrite ^/(.*) /$1 break;
- charset utf-8;
- }
复制代码
二、Discuz路由级解决方案
在/source/class/discuz/discuz_application.php中修改路由解析逻辑:
- // 原代码约236行处:
- $_GET = $this->getget($this->request_uri);
- // 修改为:
- $_GET = array_change_key_case($this->getget($this->request_uri), CASE_LOWER);
复制代码
注意事项:
1. 服务器级方案对性能影响更小
2. 修改后需更新伪静态规则缓存
3. 建议配合301重定向保持URL规范化
4. 插件开发中参数获取建议使用:
- $mod = strtolower($_GET['mod']);
- $action = strtolower($_GET['action']);
复制代码
该解决方案基于Discuz路由机制和服务器伪静态原理实现,通过标准化请求参数大小写处理,可兼容所有标准模块(forum.php、home.php等)及插件路由。实际部署时建议根据服务器环境选择对应方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |