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

CodeIgniter中含波斯语URL报请求未找到(404)问题求助

解决CodeIgniter中波斯语URL路径的404错误问题

看起来你遇到的是非ASCII字符(波斯语)URL的编码处理问题——服务器把波斯语字符解析成了乱码的ASCII串,导致无法匹配到正确的路由。我帮你整理了几个关键的解决步骤:

1. 调整.htaccess规则,保留UTF-8编码

在你的.htaccess文件中补充或修改规则,确保Apache服务器不会转义UTF-8字符:

Options -Indexes -MultiViews
AddDefaultCharset UTF-8
RewriteEngine On

# 禁止直接访问index.php外的文件
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# 核心规则:NE标记确保URL保留原始UTF-8编码
RewriteRule ^(.*)$ /Saffron/index.php/$1 [L,QSA,NE]

这里的NE(No Escape)标记是关键,它告诉Apache不要对波斯语这类多字节UTF-8字符进行额外转义,让CodeIgniter能接收到完整、正确的路径参数。

2. 配置CodeIgniter允许波斯语URI字符

打开application/config/config.php,修改以下配置项:

// 全局字符集设置为UTF-8
$config['charset'] = 'UTF-8';

// 允许URI中包含波斯语字符(添加آ-ی范围)
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-آ-ی';

默认的permitted_uri_chars只允许英文字符,加入波斯语字符范围后,CodeIgniter就不会因为字符过滤而截断或拒绝你的URL路径了。

3. 验证控制器接收参数的正确性

确保你的Product控制器方法能正常接收波斯语参数,比如:

class Product extends CI_Controller {
    public function index($product_id, $slug) {
        // 这里直接输出$slug,应该显示正确的波斯语文本
        echo $slug;
    }
}

如果有自定义路由规则(在application/config/routes.php中),也要确保规则兼容波斯语字符,比如:

$route['Product/(:num)/(:any)'] = 'Product/index/$1/$2';

(:any)会匹配包括波斯语在内的任意字符(前提是你已经配置好permitted_uri_chars)。

4. 优化URL中的空格问题

你的示例URL里有空格:مهارت-های-آموزشی-در مطالعه,空格在URL中容易引发编码混乱。建议生成URL时把空格替换成连字符,改成مهارت-های-آموزشی-در-مطالعه,既符合URL规范,也能减少解析错误。

完成以上配置后,重新请求带波斯语的URL,应该就能正常匹配到控制器方法,不会再出现404错误了。如果还有问题,可以开启CodeIgniter的日志功能(config.php中设置$config['log_threshold'] = 2;),查看日志里记录的URI参数是否正确,进一步排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:56:09