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

PHP控制器文件夹路由与URL解析配置问题求助

解决PHP简洁URL路由404问题

1. 补全URL变量的定义

你的路由代码里直接使用了$url变量但未定义,这会导致匹配逻辑完全失效。先在路由代码开头添加URL获取与处理逻辑:

// 获取请求URI并去除查询参数(比如?xxx=yyy这类内容)
$url = strtok($_SERVER['REQUEST_URI'], '?');
// 统一处理尾部斜杠,避免/contact和/contact/出现匹配差异
$url = rtrim($url, '/') . '/';

2. 配置服务器重写规则(核心步骤)

服务器默认会直接查找请求路径对应的文件/目录,不会把请求转发到项目根目录的index.php,这是简洁URL出现404的根本原因,需要配置重写规则:

Apache服务器(.htaccess)

在/tuto-php目录下创建.htaccess文件,写入以下内容:

RewriteEngine On
# 仅当请求的不是真实文件/目录时,转发到index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]

Nginx服务器

在站点配置的server块中添加:

location /tuto-php {
    try_files $uri $uri/ /tuto-php/index.php?$query_string;
}

3. 优化路由匹配逻辑

修改后的完整路由代码示例:

<?php
// 获取并标准化请求URL
$url = strtok($_SERVER['REQUEST_URI'], '?');
$url = rtrim($url, '/') . '/';

if ($url === '/tuto-php/') {
    require 'controllers/index.php';
} else if ($url === '/tuto-php/contact/') {
    require 'controllers/contact.php';
} else if ($url === '/tuto-php/about/') {
    require 'controllers/about.php';
} else {
    // 处理404场景
    http_response_code(404);
    // 可按需引入404视图文件
    // require 'views/404.view.php';
}

额外验证点

  • 确认Apache开启了mod_rewrite模块,Nginx配置修改后需重启服务
  • 检查controllers目录下的文件路径是否与require语句的相对路径匹配(基于根目录index.php的位置)
  • 调试时可临时添加var_dump($url),查看实际匹配的URL是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:05:16