我在本地创建了一个带有LAMP的服务器,我想将Laravel
用作后端,并将Angular 7
用作前端。
我将其放入我的web.php
文件中:
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
View::addExtension('html', 'php');
return view('index');
});
然后我将所有Angular文件放入/public/
文件夹中,除了index.html
内的/resources/views
之外。
原因是:如果您访问site.com/,将加载Angular。例如,如果单击链接并转到site.com/page,则angular将加载此页面。到这里为止,一切都按预期进行。
但是,如果您只是在浏览器的地址栏中键入site.com/page,则实际上是在向site.com/page发送请求。由于不存在,Web服务器将返回404,Angular应用程序将无法工作。 Angular甚至没有机会被加载。
我知道这是由于在/page
文件中没有到web.php
的路由引起的,但是我的问题是如何解决此路由问题?
谢谢。
答案 0 :(得分:2)
使用
Route::fallback
方法,您可以定义一个路由,当没有其他路由与传入请求匹配时将执行该路由。
Route::fallback(function () {
//
});
请确保将其放在路由文件的末尾,以使所有现有路由(例如您的API端点)都能正常匹配。
添加后备路由之前,另一个常见的解决方案是使用regular expression matching创建通配符路由:
Route::get('{any}', 'WildcardController@handle')->where('any', '.*');
答案 1 :(得分:0)
好的,我将引导您完成设置Laravel&Angular项目的步骤,
首先,您需要使用ng build来构建您的angular应用程序,并传递--prod之类的任何标志以在生产模式下进行创建,或者只使用--ng build别忘了更改angular创建最终文件的文件夹,您可以这样做转到angular.json并修改outputPath“:”“ ../server/public/client/”,就像这样。
第二:您需要转到由Angular创建的公用文件夹,然后将index.html文件复制或移动到laravel的view文件夹中并粘贴。
第三:您需要修改指向laravel公用文件夹中的angular客户文件夹的angular指向脚本,仅此而已。
像这样
enter image description here 我的角度文件夹在这种情况下是客户端 那里呀 您还可以通过修改ng -build命令或使用自动化构建工具(例如Gulp,Grunt和Webpack)来执行此操作。 希望我能帮助您