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
相关产品推荐
相关产品推荐

