Как настроить маршрутизацию приложений 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')));

});

1 ответ

Один из способов заключается в том, чтобы 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;
  }
}

Рад быть исправленным или мой ответ расширился.

Другие вопросы по тегам