@Tutucu

Почему не работает локализация в роутинге Laravel на Ubuntu 18.04 Apache?

После переноса сайта с опенсервера на ubuntu сайт начинает отдавать ошибку 404 на страницах, в URL которых есть локализация:

Route::group(
	[
                //LocalizationService::locale() - возвращает код языка из url
		'prefix'=>LocalizationService::locale(),
		'middleware'=> ['setLocale']
	],
	function ()
	{
		/** Главная страница*/
		Route::get('/', 'IndexController@index', 'index');

		/** Категории*/
		Route::get('/{aliasCategory}', 'CategoryController@show', 'category')->name('front.category');

		/** Страница записи*/
		Route::get('/{aliasCategory}/{aliasArticle}', 'ArticleController@show', 'article')->name('front.category.article');
	}

);
//site.ru/ru - вернёт ошибку 404

Если строго прописать префикс на ru, то, всё будет нормально, страница отобразиться:
Route::group(
	[
		'prefix'=>'ru',
		'middleware'=> ['setLocale']
	],
	function ()
	{
		/** Главная страница*/
		Route::get('/', 'IndexController@index', 'index');

		/** Категории*/
		Route::get('/{aliasCategory}', 'CategoryController@show', 'category')->name('front.category');

		/** Страница записи*/
		Route::get('/{aliasCategory}/{aliasArticle}', 'ArticleController@show', 'article')->name('front.category.article');
	}

);
//site.ru/ru - отобразит страницу

При этом :
dd(LocalizationService::locale()); //Возвращает 'ru'
//site.ru/ru - отобразит 'ru'

Страницы типа:
//site.ru/admin/article
//site.ru/login
работают нормально
В чём проблема? На openserver всё без танцев с бубном работает, переношу при помощи envoy.
  • Вопрос задан
  • 428 просмотров
Решения вопроса 1
@Tutucu Автор вопроса
Чудом решил проблему, всё дело было в кешировании роутов: при деплое я брал команды отсюда:
https://laravel.com/docs/5.8/deployment#autoloader... , прикол в том, что команда
php artisan route:cache
кеширует префиксы в роутерах и код
Route::group(
  [
                //LocalizationService::locale() - возвращает код языка из url
    'prefix'=>LocalizationService::locale(),
    'middleware'=> ['setLocale']
  ],
  function ()
  {
    
  }

);

закешируется в такой вид:
Route::group(
  [
                //LocalizationService::locale() - т.к. url нет, то вернёт и сохранит в кеш пустое значение
    'prefix'=> '',
    'middleware'=> ['setLocale']
  ],
  function ()
  {
    
  }

);

Так что если есть динамические префиксы и значения в роутах, нельзя устанавливать кеш. А чтобы отключить включенное кеширование нужно ввести команду в терминале:
php artisan route:clear
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы