Обновление страницы angularjs laravel дает ошибку 404
Не могли бы вы сказать мне, как можно решить проблему с 404notfoundexception, когда я пытаюсь перезагрузить URL-адреса, найденные с помощью ngRouteProvider? Например..
$routeProvider.when('/about',{
templateUrl:'partials/about.php',
controller: 'pageController'
});
если я нажимаю / о с URL, он отображает страницу о. Однако, когда я перезагружаю страницу, она выдает ошибку 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 ^(.*)/$ /$1 [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]
Маршруты Ларавела:
/****** 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');
});
Это работает хорошо сейчас!! Я думаю, что это решает
2 ответа
Для всех маршрутов в угловых вам нужно направить на индекс действия в Laravel.
Так что вам нужно добавить:
Route::get('/about',[
'uses'=>'siteController@index',
'as'=>'index'
]);
Все эти URL-адреса будут перенаправлены на ту же точку входа, представление отредактировано действием siteController@index
и тогда угловой маршрутизатор будет обрабатывать маршрутизацию в нужное место.
ОБНОВИТЬ
Вы избегаете шаблонов, вы можете сделать что-то вроде этого:
foreach(['/', '/about', '/something'] as $route){
Route::get($route,[
'uses'=>'siteController@index',
'as'=>'index'
]);
}
Вы можете добавить следующий код в web.php после всех маршрутов.
Route::get('/{any}', function () {
return view('welcome');})->where('any', '.*');
Приветствие — это основной файл представления (файл представления — resources/views/welcome.blade.php) в Laravel.
Это может кому-то помочь.