CodeIgniter 3多区域网站:保留区域URL尾斜杠,移除其余URL尾斜杠
问题描述
网站采用多区域架构,需实现仅保留区域根URL的尾斜杠,移除所有其他URL的尾斜杠:
- 需保留的URL示例:
example.com/us/、example.com/in/、example.com/ae/ - 需移除尾斜杠的URL示例:
example.com/in/products/→example.com/in/products,example.com/blogs/→example.com/blogs,example.com/→example.com
现有Apache重写规则会全局移除所有尾斜杠,不符合需求,需调整适配CodeIgniter 3环境。
解决方案
1. 调整Apache重写规则(.htaccess)
修改原有的尾斜杠移除规则,新增排除条件,仅对非区域根URL执行尾斜杠移除:
RewriteEngine On RewriteBase / # 仅移除非区域根URL的尾斜杠 # 排除规则:匹配 /xx/ 格式的区域根路径(xx为2位区域代码) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !^/[a-z]{2}/$ RewriteCond %{REQUEST_URI} (.*)/$ RewriteRule ^(.+)/$ $1 [R=307,L] # CodeIgniter默认路由规则,保持不变 RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
规则说明:
RewriteCond %{REQUEST_URI} !^/[a-z]{2}/$:排除以/两位小写字母/结尾的区域根URL,不对这类路径执行尾斜杠移除- 其余规则保持原有逻辑,确保静态文件、真实目录不受影响,同时正常转发请求到CodeIgniter入口文件
2. CodeIgniter 3 配置配合
修改application/config/config.php中的配置,避免CI自动生成带尾斜杠的URL:
// 清空URL后缀,避免自动添加斜杠或其他后缀 $config['url_suffix'] = ''; // 强制URL转为小写(可选,匹配区域代码的小写规范) $config['lowercase_uri'] = TRUE; // 指定URI协议,确保路由解析正常 $config['force_uri_protocol'] = 'REQUEST_URI';
适配说明:
如果你的区域代码不是固定2位(比如存在3位代码),可将正则调整为!^/[a-z]{2,3}/$,根据实际区域代码长度修改匹配规则。
内容的提问来源于stack exchange,提问作者Subhankar Khan
相关产品推荐
相关产品推荐

