CodeIgniter URL
默认情况下,CodeIgniter 的 URL 旨在对搜索引擎和人类友好。它使用基于 段 的方法,而不是与动态系统同义的标准“查询字符串”方法:
https://example.com/news/article/my_article
你可以使用 URI 路由 功能灵活地定义 URL。
URI库 和 URL辅助函数 包含可以轻松使用 URI 数据的函数。
URL 结构
基本 URL 仅包含主机名
当你有基本 URL https://www.example.com/ 并想象以下 URL 时:
https://www.example.com/blog/news/2022/10?page=2
我们使用以下术语:
术语 |
例子 |
描述 |
---|---|---|
基本 URL |
https://www.example.com/ |
基本 URL 通常表示为 baseURL。 |
URI 路径 |
/blog/news/2022/10 |
|
路由路径 |
/blog/news/2022/10 |
相对于基本 URL 的 URI 路径。它也称为 URI 字符串。 |
查询 |
page=2 |
基本 URL 包含子文件夹
当你有基本 URL https://www.example.com/ci-blog/ 并想象以下 URL 时:
https://www.example.com/ci-blog/blog/news/2022/10?page=2
我们使用以下术语:
术语 |
例子 |
描述 |
---|---|---|
基本 URL |
https://www.example.com/ci-blog/ |
基本 URL 通常表示为 baseURL。 |
URI 路径 |
/ci-blog/blog/news/2022/10 |
|
路由路径 |
/blog/news/2022/10 |
相对于基本 URL 的 URI 路径。它也称为 URI 字符串。 |
查询 |
page=2 |
URI 安全性
在 4.4.7 版本加入.
重要
从 v4.4.7 版本之前升级的用户需要在 app/Config/App.php 中添加以下内容才能使用此功能:
public string $permittedURIChars = 'a-z 0-9~%.:_\-';
为了帮助尽量减少可能将恶意数据传递到你的应用程序的可能性,CodeIgniter 对 URI 字符串(路由路径)允许的字符相当严格。URI 只能包含以下内容:
字母数字文本(仅限拉丁字符)
波浪号:
~
百分号:
%
句点:
.
冒号:
:
下划线:
_
减号:
-
空格:`` ``
备注
该检查由 Router
执行。Router 获取由 SiteURI
类保存的 URL 编码值,对其进行解码,然后检查它是否包含不允许的字符串。
添加允许的字符
可以通过 Config\App::$permittedURIChars
更改允许的字符。
如果你想在 URI 路径中使用 Unicode,请对其进行修改以允许使用这些字符。例如,如果你想使用孟加拉语字符,你需要在 app/Config/App.php 中设置以下值:
public string $permittedURIChars = 'a-z 0-9~%.:_\-\x{0980}-\x{09ff}';
可以在维基百科的 Unicode block 中找到完整的 Unicode 范围列表。
删除 index.php 文件
当你使用 Apache Web 服务器时,默认情况下,在你的 URL 中需要 index.php 文件:
example.com/index.php/news/article/my_article
如果你的服务器支持重写 URL,你可以使用 URL 重写轻松删除此文件。这由不同的服务器以不同的方式处理,但我们将在这里展示两个最常见的 Web 服务器的示例。
Apache Web 服务器
Apache 必须启用 mod_rewrite 扩展。如果是,你可以使用一些简单规则的 .htaccess
文件。这里是一个这样文件的示例,使用“否定”方法,其中重定向除指定项之外的所有内容:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
在这个例子中,除了现有目录和现有文件的任何 HTTP 请求都被视为对你的 index.php 文件的请求。
备注
这些特定规则可能不适用于所有服务器配置。
备注
也要从上述规则中排除你可能需要从外界访问的任何资源。
Nginx
在 Nginx 中,你可以定义一个位置块并使用 try_files
指令来获取与我们在上面的 Apache 配置中相同的效果:
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
这将首先查找与 URI 匹配的文件或目录(从 root 和 alias 指令的设置构造每个文件的完整路径),然后将请求以及任何参数发送到 index.php 文件。