yii2 url美化需同时配置框架urlmanager组件(启用enableprettyurl、关闭showscriptname)和web服务器(apache配.htaccess或nginx配try_files),缺一则导致404。

装完 Yii2 后想让 URL 看起来干净专业,比如把 http://example.com/index.php?r=site%2Fabout 变成 http://example.com/site/about,核心就两件事:Yii 框架内部识别美化规则 + Web 服务器把请求正确转发给 index.php。缺一不可,光改一边会 404。
配置 urlManager 组件
这是 Yii 内部的“翻译官”,告诉框架怎么解析和生成 URL。
- 打开你的应用配置文件:basic 版本是
config/web.php,advanced 版本则是frontend/config/main.php(前台)或backend/config/main.php(后台) - 在
'components' => [ ... ]数组里添加或修改'urlManager'配置:
'urlManager' => [
'class' => 'yii\web\UrlManager',
'enablePrettyUrl' => true, // 启用美化,去掉 ?r=xxx
'showScriptName' => false, // 隐藏 index.php
'rules' => [],
],
注意:'suffix' => '.html' 这类后缀不是必须的,加了反而要求所有 URL 必须带 .html 才能访问,新手建议先留空。
Apache:启用重写并放好 .htaccess
Apache 不会自动把 /site/about 转给 index.php,得靠它干活。
- 确认 Apache 已开启
mod_rewrite模块:编辑httpd.conf,取消这行的注释:LoadModule rewrite_module modules/mod_rewrite.so - 确保项目
web/目录允许覆盖规则:在httpd.conf或虚拟主机配置里,找到对应目录的<directory></directory>块,把AllowOverride None改成AllowOverride All - 在
web/目录(也就是index.php所在目录)下新建文件.htaccess,内容如下:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
保存后重启 Apache(sudo apachectl restart)。
Nginx:直接改 server 配置
Nginx 不读 .htaccess,得手动写转发规则。
- 编辑你的 Nginx 站点配置(通常在
/etc/nginx/sites-available/或nginx.conf的server块内) - 在
location /块里加入以下逻辑(放在root和index设置之后):
location / {
try_files $uri $uri/ /index.php?$args;
}
或者更精准匹配(推荐):
location / {
try_files $uri $uri/ /index.php?$query_string;
}
改完执行 sudo nginx -t && sudo systemctl reload nginx 测试并重载配置。
验证与排错要点
配置完别急着刷新,按顺序检查:
- 浏览器直接访问
http://your-domain.com/site/about—— 成功?说明全通了 - 如果 404:大概率是 Web 服务器没把请求转给
index.php,重点查.htaccess是否生效(Apache)或try_files是否写对(Nginx) - 如果 500:检查
.htaccess语法(比如漏空格、换行错位),或 Nginx 配置中路径斜杠是否多写/少写 - 如果页面正常但 URL 地址栏还是显示
index.php:确认showScriptName => false已设置,且没有其他中间件或 CDN 强制保留脚本名
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











