我有一条路线:
Route::controller('/', 'HomeController');
HomeController
有一个行动getIndex
,可以正常使用。但是,当浏览到http://localhost:4040/public/style.css
时,应用程序将从HomeController::getIndex
返回视图。是什么赋予了??不应该返回静态文件style.css
??我已经确认CSS文件确实存在于公共文件夹中。
要清楚,我正在运行这样的应用程序:
php -S localhost:4040 server.php
修改:
嗯,所以以下似乎有效:1)通过以下方式为项目服务:
php artisan serve
2)没有public/
前缀的参考文件。
php artisan serve
命令执行的操作有何不同?
答案 0 :(得分:0)
使用Route::controller()
时,如果查看php artisan routes
,getIndex
路由会有一个可选参数{one?}/{two?}/...
,因为这些参数没有匹配的模式{{1}被style.css
抓住了。这是完全预期的行为,{one?}
。
但是,使用index.php
,首先调用php artisan serve
文件。
server.php
你可以清楚地看到它在$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$uri = urldecode($uri);
$paths = require __DIR__.'/bootstrap/paths.php';
$requested = $paths['public'].$uri;
// This file allows us to emulate Apache's "mod_rewrite" functionality from the
// built-in PHP web server. This provides a convenient way to test a Laravel
// application without having installed a "real" web server software here.
if ($uri !== '/' and file_exists($requested))
{
return false;
}
require_once $paths['public'].'/index.php';
中检查文件是否真实,如果是,它会停止调用可能将其作为路由参数处理的if ($uri !== '/' and file_exists($requested))
,而是返回一个真实的文件。