![](/img/trans.png)
[英]How to make Apache serve index.php instead of index.html?
[英]How to serve index.html with Laravel?
我正在努力理解如何使用 Laravel 加载index.html
文件。 它似乎只适用于 index.php,这不是我想要的。
这里有一个问题:
我有两个文件夹client和server 。 我的服务器文件夹包含整个 Laravel 应用程序。 我的客户端目录包含 AngularJS 应用程序。 (我不能使用公共目录)
我希望 Laravel 为index.html
以及来自客户端目录的所有静态文件提供服务。
更改'public' => __DIR__.'/../public'
确实有些作用,但是它破坏了我的所有路由,即无论我输入什么 URL index.html
都会加载损坏的静态资产。 例如/api/users
不再返回 JSON 对象,而是返回相同的index.html
。
我不确定您的文件结构发生了什么,但是,要通过 php 引擎加载 html 文件,您可以使用:
View::addExtension('html', 'php');
然后,
Route::get('/', function()
{
return View::make('index');
});
应该返回 index.html。
我相信我现在明白你了。 这是一个潜在的解决方案,假设目录结构类似于以下内容:
/
/client
index.html
/server
/app
/bootstrap
/public
/vendor
...
在 Laravel 中使用刀片模板。 你的情况非常独特,所以它不会是一个“正常”的刀片模板。 它看起来像这样:
{{ file_get_contents(base_path() . '../client/index.html') }}
如果您可以改用/client
目录中的index.php
文件,它也可能如下所示:
<?php include base_path() . '../client/index.php'; ?>
我只是指出这一点,因为如果您需要或希望,您可以在文件中使用其他 PHP 语句。 您还可以使用普通的View::make('angular')->with('var', $var)
将数据从控制器一直向下传递到这个index.php
文件中,它们将自动在范围内.
这似乎有点hacky,确实如此,但应该使您不必修改任何其他内容。 当然,您的index.html
文件应该包含 angular 应用程序的整个标记。 另一个好处是,由于您几乎仍然完全包含在 Laravel 中,如果不需要(无论出于何种原因),您可能会将内容“向上”移出您的 angular 应用程序并返回到框架中。
如果您想使用php artisan serve
serve 为本地开发php artisan serve
,请在“server.php”中更改以下几行
if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
return false;
}
require_once __DIR__.'/public/index.php';
到
if ($uri === '/') {
$uri = "/index.html";
return false;
}
if (file_exists(__DIR__.'/public'.$uri)) {
return false;
}
require_once __DIR__.'/public/api/index.php';
现在您可以将“index.html”作为默认文档。
仅当 angular 构建输出位于公共文件夹中且子文件夹中的 laravel api(index.php 和 .htaccess)时才有效。
希望它可以帮助某人!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.