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

如何通过index.php路由加载视图页面,避免404错误?

解决方法

1. 修改页面链接格式

把原来的 <a href='page1.php'> 改成 <a href='page1'> 或者带根路径的 <a href='/page1'>,点击后URL会变成 mydomain.com/page1,避免直接指向根目录不存在的文件。如果非要保留.php后缀(比如<a href='page1.php'>),后续服务器配置要对应调整。

2. 配置服务器重写规则

通过服务器规则,让所有非真实文件/目录的请求都转发到index.php处理:

Apache服务器

在网站根目录创建.htaccess文件,写入以下内容:

RewriteEngine On
# 跳过真实存在的文件和目录(比如assets里的css/js)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 将请求转发到index.php,同时传递URL路径参数
RewriteRule ^(.*)$ index.php?path=$1 [L,QSA]

如果要支持.php后缀的链接,把最后一行改成:

RewriteRule ^(.*)\.php$ index.php?path=$1 [L,QSA]

Nginx服务器

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

location / {
    # 优先访问真实文件/目录,否则转发到index.php
    try_files $uri $uri/ /index.php?$args;
}

若要支持.php后缀链接,可追加:

location ~* \.php$ {
    try_files $uri /index.php?$args;
    fastcgi_pass 127.0.0.1:9000; # 此处根据你的PHP-FPM配置调整
    fastcgi_index index.php;
    include fastcgi_params;
}

3. 调整index.php的视图加载逻辑

修改index.php中读取路径、加载视图的代码,保证能正确获取页面名,同时做安全校验防止非法访问:

// 获取请求的路径参数(Apache用$_GET['path'],Nginx可直接解析REQUEST_URI)
$requestPath = $_GET['path'] ?? '';

// 过滤非法字符,防止目录遍历攻击
$safePath = preg_replace('/[^a-zA-Z0-9_\-]/', '', $requestPath);

// 拼接视图文件路径
$viewFile = __DIR__ . '/views/' . $safePath . '.php';

// 检查文件是否存在,存在则加载,否则返回404
if (file_exists($viewFile) && is_file($viewFile)) {
    include $viewFile;
} else {
    http_response_code(404);
    // 可加载自定义404视图
    include __DIR__ . '/views/404.php';
}

如果是支持.php后缀的场景,$_GET['path']已为page1(来自重写规则),直接使用上述拼接逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:55:06