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

Apache服务器下.htaccess配置PHP路由遭遇404错误求助

问题修复方案

1. 修正路由解析逻辑(index.php)

当前代码中$request_uri[2]的索引错误:访问www.myWebPageName.com/app/page1时,$_SERVER['REQUEST_URI']的完整路径是/project_folder/app/page1,用explode('/', ...)拆分后数组结构为['', 'project_folder', 'app', 'page1'],索引2对应app而非目标页面标识,导致路由判断失效。

修改后的index.php代码:

<?php
// 获取请求路径并去除首尾斜杠
$request_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');
// 拆分路径为数组
$path_segments = explode('/', $request_path);

// 提取相对于app目录的页面标识
$requested_page = '';
if (count($path_segments) >= 3) {
    $requested_page = $path_segments[2];
}

if ($requested_page === '' || $requested_page === 'page1') {
    $route = '/page1.php';
} elseif ($requested_page === 'page2') {
    $route = '/page2.php';
} else {
    $route = '/404.php';
}

require __DIR__ . $route;

2. 修正.htaccess配置

当前配置的RewriteBase和目标路径与服务器环境不匹配,调整如下:

RewriteEngine On
# 设置项目实际的基础路径
RewriteBase /project_folder/app/
# 直接访问index.php时跳过重写
RewriteRule ^index\.php$ - [L]
# 请求非文件/目录时,重写到index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L,QSA]

3. 服务器环境检查

  • 启用Apache的mod_rewrite模块:执行a2enmod rewrite命令,然后重启Apache服务(systemctl restart apache2)
  • 确保目录权限正确:Apache进程(通常为www-data用户)需拥有/var/www/html/project_folder的读取权限
  • 配置虚拟主机的AllowOverride:在虚拟主机配置中添加以下内容,确保.htaccess规则生效,修改后重启Apache:
    <Directory /var/www/html/project_folder>
        AllowOverride All
    </Directory>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:33:15