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

如何通过.htaccess重写PHP MVC项目路由以隐藏index.php参数前缀

问题修复方案

现有配置问题排查

  • 正则表达式语法错误:字符集[a-zAZ0-9]缺少A-Z的范围连接符,正确应为[a-zA-Z0-9],且当前规则无法匹配带斜杠的多级路由(如storefront/detail)
  • 未指定重写入口文件:规则仅写了?ruta=$1没有关联到入口index.php,服务器无法将请求转发到PHP处理
  • 缺少子目录适配:你的项目部署在/realestate/web/子目录下,未配置RewriteBase会导致重写路径匹配到站点根目录,规则不生效
  • 注意参数拼写一致性:你问题里提到的原路由参数是route,但PHP和重写规则里用的是ruta,需要确保前后一致

修复后的.htaccess配置

将该文件放在/realestate/web/目录下,内容如下:

RewriteEngine On
# 指定项目基础路径
RewriteBase /realestate/web/

# 跳过真实存在的文件和目录
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 重写所有请求到index.php,传递ruta参数
# L标记表示匹配成功后不再执行后续规则,QSA标记用于保留原有GET参数
RewriteRule ^(.*)$ index.php?ruta=$1 [L,QSA]

PHP代码优化修复

你现有404输出的HTML语法存在错误,同时建议添加XSS防护,修复后的对应片段:

//404
header('HTTP/1.1 404 Not Found');
echo '<html><body><p style="color:red"><b>ERROR: No existe la ruta '. htmlspecialchars($_GET['ruta']) . '</b></p></body></html>';
exit;

生效验证步骤

  • 确认Apache的mod_rewrite扩展已经开启
  • 确认Apache站点配置中,/realestate/web/目录的AllowOverride参数设置为All,允许.htaccess文件生效
  • 直接访问http://localhost/realestate/web/storefront即可正常匹配路由,访问根路径http://localhost/realestate/web/会默认走home路由

内容的提问来源于stack exchange,提问作者Antonio Rodríguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:45:04