我一直致力于制作自己的框架,并专注于学习比我在大学学到的更高级的编程实践。我使用.htaccess
将所有页面请求重定向到我的引导文件,该文件根据请求 URI 加载控制器和主题。
网址格式为site.com/Controller[/optional/multiple/params]
问题是,可以说,我正在尝试包含图像或 css 文件,但它不存在。在萤火虫中,由于重定向,它们不会显示为 404 错误。
.htacess 文件
Options +FollowSymLinks
IndexIgnore */*
# Turn on the RewriteEngine
RewriteEngine On
# Redirect to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
我确实检查并解析了 URI,它确实转发到 404 控制器并为请求的 URI 生成一个 404 标头。但是,对于 CSS、图像等嵌入文件,它们会显示与请求的页面相同的响应,并且不会生成 404 错误。
IE 如果你去 index.php,index.php 将加载正常,但所有无效的 css 文件将具有与 index.php 相同的标题响应。
以下是解析 URI 后加载控制器的代码:
//locate
$file = 'Lume/' . self::$AppPath . 'Controller/' . self::$ControllerName;
if(!file_exists($file . '.php')){
header('HTTP/1.0 404 Not Found');
$file='Lume/' . self::$AppPath . 'Controller/_404.php';
}
//create
$controller = str_replace('/', '\\', '/' . $file);
if(!is_subclass_of($controller, '\Lume\Abstracts\Controller'))
throw new \Exception('Route::Main The controller must extend from Lume\Abstracts\Controller');
self::$Controller =& new $controller();