伪静态
干净 URL 怎么来、换到 Apache / Nginx 要加什么规则、配不了伪静态怎么办。
默认地址:/list/news、/detail/hello | 路径式地址:/index.php/list/news
两种地址
| 形态 | 长什么样 | 条件 |
|---|---|---|
| 干净 URL(推荐) | /list/news | 服务器开了重写(伪静态) |
| 路径式 | /index.php/list/news | 任何环境都能用,不依赖重写 |
站内所有链接都由程序生成,模板里不用手写前缀 —— 改了地址形态,全站链接跟着变,不用去改模板。
用自带的服务器组件
若用的是随程序提供的那个服务器组件,伪静态已经配好了,装完即是干净 URL,不需要动任何规则。
用 Apache
在 wwwroot/ 下放一个 .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]
前提是空间开了 mod_rewrite、并且允许 .htaccess 生效(有的空间默认关着,要单独开)。
用 Nginx
在站点的 server { } 里加:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
配不了伪静态怎么办
把 config/config.php 里的 base 改成 '/index.php':
'base' => '/index.php',
地址就退化成 /index.php/list/news 这种形式,功能一模一样,只是不那么好看。
空间不给配重写、或临时确认"是不是规则写错了"时就这么用。
⚠️ 配了伪静态却还是 404,多半是规则没生效或目录指错了:
规则要放在网站根目录(也就是
wwwroot/)里,不是程序包根目录。
