Apache Rewrite规则解析及PHP Toro路由项目404问题求助
问题解析与解决方案
Apache Rewrite规则解析
这段Rewrite规则是为Toro这类前端控制器框架设计的,作用是把非静态资源的请求统一交给index.php处理,逐行解析如下:
RewriteEngine On:启用Apache的URL重写功能RewriteBase /project/:设定重写规则的基准路径,所有重写操作都基于/project/这个根路径执行RewriteCond %{REQUEST_FILENAME} !-f:当请求的路径不是真实存在的文件时,满足该条件RewriteCond %{REQUEST_FILENAME} !-d:当请求的路径不是真实存在的目录时,满足该条件RewriteCond $1 !^(index\.php):当请求的URL片段(对应规则中^(.+)$匹配的内容)不以index.php开头时,满足该条件RewriteRule ^(.+)$ index.php/$1 [L]:将符合上述所有条件的请求,转发到index.php/后拼接原请求路径;[L]表示这是最后一条规则,不再执行后续重写逻辑
简言之:除了真实存在的文件、目录,以及直接访问index.php的请求,其他所有请求都会交给index.php,由Toro路由负责分发处理。
资源路径404问题排查与解决
访问localhost/project/login时,jqueryui.css请求路径缺失/project/前缀导致404,核心原因是页面中资源引用路径的写法错误,提供以下解决方案:
方案1:添加HTML base标签
在页面的<head>标签内添加以下代码,指定所有相对路径的基准URL:
<base href="/project/" />
之后页面中所有相对路径的资源引用(如web/vendors/jquery-ui/jquery.css),会被浏览器自动解析为http://localhost/project/web/vendors/jquery-ui/jquery.css。
方案2:修改资源引用为绝对路径
直接将页面中所有静态资源的引用路径修改为包含/project/前缀的绝对路径,示例:
<link rel="stylesheet" href="/project/web/vendors/jquery-ui/jquery.css">
这种方式直接高效,适合资源引用数量较少的场景。
方案3:通过PHP动态输出基准路径
在项目的全局配置文件或index.php中定义基准URL常量:
define('BASE_URL', '/project/');
然后在模板中引用资源时调用该常量:
<link rel="stylesheet" href="<?php echo BASE_URL; ?>web/vendors/jquery-ui/jquery.css">
这种方式适合需要频繁调整基准路径的场景,后续部署到服务器时只需修改常量值即可。
注:当前的Rewrite规则本身无问题,静态资源(CSS、JS等)因是真实存在的文件,会被规则排除,不会转发到
index.php,只要路径正确就能正常访问。
内容的提问来源于stack exchange,提问作者Brian Powell
相关产品推荐
相关产品推荐

