Назад | Перейти на главную страницу

Как я могу заставить маршрутизацию приложений Laravel работать в подпапке сайта WordPress?

У меня есть существующий сайт WordPress, и мне нужно, чтобы приложение Laravel работало в подпапке под названием «api». Это сайт nginx, поэтому перенаправления .htaccess не будут работать, и лучшим решением, если для этого потребуется перенаправление, будет решение PHP, поскольку я не уверен, что смогу получить доступ к конфигурации nginx непосредственно на этом конкретном сервере. Я могу получить доступ к файлу index.php в папке / public / приложения Laravel, но при переходе в / api / route / я попадаю на страницу WordPress 404. Я пробовал делать перенаправления в конфигурации nginx и PHP, но ничего не работает. Есть ли что-то конкретное, что мне нужно сделать, чтобы поместить приложение Laravel в подпапку? Я унаследовал проект от другого человека, и в настоящее время он работает там, где есть, но его нужно переместить на новый сервер.

Мои маршруты выглядят так:

Route::group(array('before' => 'api_auth'), function()
{
    Route::get('/', 'Home\HomeController@index');
    Route::resource('cusomter', 'Customer\CustomerController', array('only' => array('show', 'store')));
    Route::resource('customer.conversion', 'Customer\CustomerController', array('only' => array('index')));
    Route::resource('customer.search', 'Customer\CustomerController', array('only' => array('index')));

});

Один из способов - заставить Nginx сначала попытаться получить доступ к Wordpress, а затем попробовать Laravel, если он не сработает, используя try_files. Вот как я это делаю, когда у меня есть Cake PHP в корне домена и Wordpress в каталоге / blog. У этого подхода, вероятно, есть недостатки, но он отлично работает на моих сайтах - небольшой объем.

location / {
  try_files $uri $uri/ /api/route/index.php?$args;
}

Другой способ - определить расположение для каждого приложения. Я почти уверен, что мои регулярные выражения ошибочны, и не удивлюсь, если что-то еще не так, поскольку я это не тестировал, но это должно быть концептуально нормально и вести вас в правильном направлении.

server {
  root /var/www/html;

  location ~ /api/route {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME /api/route/$fastcgi_script_name; 
  }

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}

Рад, что меня исправят или я расширил свой ответ.