Доброго времени суток.
Have some trouble.
Есть сайт на Angular и сервер на PHP (Laravel).
Заказчик попросил убрать # из урла, после этого при обновлении страницы ловим 404.
RouterModule.forRoot(appRoutes, { useHash: false }),
Посмотрел, как это решается (Методом конфигурации файла .htaccess), но не помогло, ибо там конфликты с PHP.
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
Файлы index.html и index.php лежат в одной директории - /var/www/satu/public Могу ли я как-то решить эту проблему через файл .htaccess, не меняя местоположение файлов, или надо сделать что-то еще?
Спасибо.
routes/web.php
<?php
Route::group(['prefix' => 'admin'], function () {
Voyager::routes();
});
// Route for parse CSV files to DB
Route::get('/parseData', 'ParseController@parse');
Route::get('/parseImages', 'ParseController@addImages');
Route::get('/login', 'Web\LoginController@loginForm')->name('loginForm');
Route::post('/login', 'Web\LoginController@login')->name('login');
Route::get('/logout', 'Web\LoginController@logout')->name('logout');
Route::get('/register', 'Web\LoginController@registerForm')->name('registerForm');
Route::post('/register', 'Web\LoginController@register')->name('register');
Route::post('/check-phone', 'Web\LoginController@checkPhone')->name('check_phone');
Route::group(['middleware' => ['auth']], function() {
});
Route::group(['prefix' => 'api/v1.0', 'namespace' => 'Api\v1_0', 'middleware' => ['cors']], function () {
Route::post('/login', 'LoginController@login');
Route::post('/web/login', 'LoginController@webLogin');
Route::post('/register', 'LoginController@register');
Route::post('/confirm-phone', 'LoginController@confirmPhone');
Route::post('/resend-confirm-sms', 'LoginController@resendConfirmSms');
Route::post('/recovery-code-send', 'LoginController@sendRecoveryPasswordCode');
Route::post('/recovery-password', 'LoginController@recoveryPassword');
Route::group(['middleware' => ['auth']], function() {
Route::get('/user', 'LoginController@user')->name('api.user');
Route::put('/user', 'LoginController@userUpdate')->name('api.user.update');
Route::post('/contracts/verify', 'PaymentsScheduleController@verify');
Route::get('/notifications', 'NotificationController@notificationsList');
Route::put('/user/token', 'LoginController@updateToken');
});
});
Route::get('/api/soap/logs', 'Web\LogsController@showLogs')->name('admin.soap.logs');
Route::get('/api/soap/fix', 'Web\LogsController@fixLogs')->name('admin.soap.fix');
Route::get('/postman', function () {
return view('welcome');
})->name('index');
Это SPA с маршрутизацией по history api.
По поводу фронта ничего не скажу, но по бэку .htacess
трогать не надо. Нужно настроить маршруты в laravel.
Конкретно в laravel должен быть маршрут, принимающий любой url, который возвращает страницу инициализации SPA приложения.
К сожалению вы не указали версию laravel, поэтому примем версию 5.5.* - 6.*
в файле routes/web.php
надо вместо машрута /
создать маршут такой (в самом низу)
Route::get('{url}', 'Controller@enty')->where('url', '.*');
Урлы строятся с хэшом не на стороне laravel, а на стороне angular.
Нужно изменить в машрутизации ангуляра LocationStrategy на PathLocationStrategy
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как проверить есть ли "?" в url, не зная конкретного параметра
Пытаюсь установить Laravel при помощи Composer, но устанавливается версия Laravel 58, хотя уже давно есть версии 6