angularjs laravel 页面刷新出现404错误
angularjs laravel page refresh gives 404 error
当我尝试重新加载使用 ngRouteProvider 找到的 urls 时,您能告诉我如何解决 404notfoundexception 的问题吗?
例如..
$routeProvider.when('/about',{
templateUrl:'partials/about.php',
controller: 'pageController'
});
如果我从 url 单击 /about,它会显示关于页面。但是,当我重新加载页面时,它会出现 404 错误。我看到我需要编辑我的 .htaccess 文件。但是我不完全确定要添加什么代码。
这是我当前的 .htaccess 文件。请注意,我尝试添加一些无效的内容。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
#Options +FollowSymLinks
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ / [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#handle angular route
#RewriteCond %{REQUEST_URI} !index
#RewriteRule (.*) index.html [L]
Laravel 路线:
/****** Api *******/
Route::group([
'prefix' =>'/api',
'middleware' => 'web'
], function(){
Route::get('/post/{id?}',[
'uses'=>'postApiController@getPost',
'as'=>'apiPost'
]);
Route::get('/slug/{slug?}',[
'uses'=>'postApiController@getOnePost',
'as'=>'apiPostSlug'
]);
Route::get('/addition/{slug?}',[
'uses'=>'postApiController@getOnePostAddition',
'as'=>'apiAdditionSlug'
]);
Route::get('/posts',[
'uses'=>'postApiController@getAllPost',
'as'=>'api.allPost'
]);
Route::get('/contacts',[
'uses'=>'ContactController@getContactList',
'as'=>'api.getContactList'
]);
Route::get('/nextslug/{id}',[
'uses'=>'postApiController@getNextRowSlug',
'as'=>'api.getNextSlug'
]);
Route::post('/mail',[
'uses'=>'ContactController@postContact',
'as'=>'api.postContact'
]);
});
/***** Api ends *****/
Route::get('/',[
'uses'=>'siteController@index',
'as'=>'index'
]);
提前致谢:)
编辑
我在 laravel 路线上添加了以下代码:
/***** Handle missing ****/
Route::get('/pages/{slug?}',function($slug){
return view('index');
});
它现在运行良好!!我认为这解决了问题
对于 angular 中的所有路由,您需要路由到 Laravel 中的索引操作。
所以你需要添加:
Route::get('/about',[
'uses'=>'siteController@index',
'as'=>'index'
]);
所有这些 url 将被重定向到相同的入口点,通过操作 siteController@index
呈现视图,然后 angular 路由器将处理路由到正确的位置。
更新
你可以避免样板代码,你可以这样做:
foreach(['/', '/about', '/something'] as $route){
Route::get($route,[
'uses'=>'siteController@index',
'as'=>'index'
]);
}
当我尝试重新加载使用 ngRouteProvider 找到的 urls 时,您能告诉我如何解决 404notfoundexception 的问题吗? 例如..
$routeProvider.when('/about',{
templateUrl:'partials/about.php',
controller: 'pageController'
});
如果我从 url 单击 /about,它会显示关于页面。但是,当我重新加载页面时,它会出现 404 错误。我看到我需要编辑我的 .htaccess 文件。但是我不完全确定要添加什么代码。
这是我当前的 .htaccess 文件。请注意,我尝试添加一些无效的内容。
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
#Options +FollowSymLinks
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ / [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#handle angular route
#RewriteCond %{REQUEST_URI} !index
#RewriteRule (.*) index.html [L]
Laravel 路线:
/****** Api *******/
Route::group([
'prefix' =>'/api',
'middleware' => 'web'
], function(){
Route::get('/post/{id?}',[
'uses'=>'postApiController@getPost',
'as'=>'apiPost'
]);
Route::get('/slug/{slug?}',[
'uses'=>'postApiController@getOnePost',
'as'=>'apiPostSlug'
]);
Route::get('/addition/{slug?}',[
'uses'=>'postApiController@getOnePostAddition',
'as'=>'apiAdditionSlug'
]);
Route::get('/posts',[
'uses'=>'postApiController@getAllPost',
'as'=>'api.allPost'
]);
Route::get('/contacts',[
'uses'=>'ContactController@getContactList',
'as'=>'api.getContactList'
]);
Route::get('/nextslug/{id}',[
'uses'=>'postApiController@getNextRowSlug',
'as'=>'api.getNextSlug'
]);
Route::post('/mail',[
'uses'=>'ContactController@postContact',
'as'=>'api.postContact'
]);
});
/***** Api ends *****/
Route::get('/',[
'uses'=>'siteController@index',
'as'=>'index'
]);
提前致谢:)
编辑
我在 laravel 路线上添加了以下代码:
/***** Handle missing ****/
Route::get('/pages/{slug?}',function($slug){
return view('index');
});
它现在运行良好!!我认为这解决了问题
对于 angular 中的所有路由,您需要路由到 Laravel 中的索引操作。
所以你需要添加:
Route::get('/about',[
'uses'=>'siteController@index',
'as'=>'index'
]);
所有这些 url 将被重定向到相同的入口点,通过操作 siteController@index
呈现视图,然后 angular 路由器将处理路由到正确的位置。
更新
你可以避免样板代码,你可以这样做:
foreach(['/', '/about', '/something'] as $route){
Route::get($route,[
'uses'=>'siteController@index',
'as'=>'index'
]);
}