laravel неверное действие маршрута с поддоменом - PullRequest
1 голос
/ 28 марта 2020

Как правильно добавить поддомен в ваши маршруты? У меня есть проект laravel / hometead, работающий на моем локальном компьютере, но когда я перевожу его на HostGator, общий хост-сервер, он больше не работает. Ну, домашняя страница работает, но ссылки на подстраницы - нет.

Например, следующий маршрут отлично работает на моей локальной версии:

Route::get('/appointments', 'AppointmentController@index');

Но если я использую этот маршрут на удаленном сервере, он переходит на tekknow.net/appointments вместо tekknow.net/medaverter/appointments.

Поэтому я следовал инструкциям здесь: https://laravel.com/docs/5.6/routing#route -group-sub-domain-routing и добавил префикс, подобный этому:

Route::prefix('MedAverter')->group(function() {
  Route::get('/appointments', 'AppointmentController@index');
});

Но это тоже не работает. Это также идет к /tekknow.net/appointments

Я также попытался изменить маршрут на это:

Route::get('/MedAverter/appointments', 'AppointmentController@index');

Но это также пошло на tekknow.net/appointments

Кто-нибудь знает, что я делаю не так?

РЕДАКТИРОВАТЬ : Я зашел на свою HostGator cPanel и посмотрел на все мои поддомены и увидел, что мой поддомен root был medaverter.tekknow. net который связан с Документом root от medaverter.tekknow.net/MedAverter, который перенаправляется на http://www.tekknow.net/MedAverter. Поэтому я переименовал свою папку из medaverter в MedAverter, чтобы соответствовать перенаправлению поддоменов.

Вот снимок экрана, показывающий, что я вижу в cPanel для столбцов Поддомены. Root Домен, Документ Root и Перенаправление enter image description here

Ответы [ 3 ]

1 голос
/ 31 марта 2020

При попытке php artisan route:list | grep appointments,

он печатает:

[~/www/MedAverter]# php artisan route:list | grep appointments 

| | GET|HEAD | MedAverter/appointments | | App\Http\Controllers\AppointmentController@index | web | 

Это означает, что ваш маршрут MedAverter/appointments работает на laravel.

Error 404 означает, что маршрут не может быть найден.

Так что я думаю, что-то не так с вашей nginx конфигурацией.

Когда я пытаюсь http://tekknow.net/MedAverter/MedAverter/appointments. Он действительно нашел маршрут с ошибкой 500. medaverter-500

Итак, я думаю, что вы определили этот код в вашей конфигурации nginx:

  location = / {
    rewrite ^ https://tekknow.net/MedAverter;
  }

Решение 1:

Измените обратно на rewrite ^ https://tekknow.net/; в nginx конфигурации.

(Я не знаком с hostGatar cPanel, но я думаю, что вы можете изменить medaverter.tekknow.net/MedAverter перенаправленным до http://www.tekknow.net/ `)

И в вашем laravel проекте вам нужно оставить prefix MedAverter до appointments.

Решение 2:

Сохраните код rewrite. Это означает, что вам не нужно изменять редирект cPanel.

и удалять prefix MedAverter в laravel маршрутах. HostGatar (Nginx) будет автоматически перенаправлять с этим префиксом MedAverter для appointments.

0 голосов
/ 31 марта 2020

вы можете использовать группы маршрутов, вот пример, попробуйте это:

Route::group(['prefix' => 'medaverter', function () {
        Route::get('/appointments', [AppointmentController::class, 'index'])->name('index');

});

или

Route::group(['prefix' => 'medaverter', function () {
    Route::get('/appointments', 'AppointmentController@index');

});
0 голосов
/ 31 марта 2020

Очистить все кеши

Проблема, которую вы получаете, может быть связана с кешем. Итак, убедитесь, что это не проблема, запустив

php artisan route:clear && php artisan view:clear && php artisan config:clear && php artisan cache:clear && php artisan clear-compiled

Базовый URL

Если вы хотите изменить базовый URL вашего Laravel приложения, это то, что уже спросил .

Префиксы с несколькими путями

В этом случае у вас есть несколько маршрутов с одинаковым префиксом на своем пути. В этом случае вы можете использовать группы маршрутов для упрощения структуры.

Route::prefix('medaverter')->group(function () {
    Route::get('/', function () {
        // Path /medaverter
    });
    Route::get('appointments', function () {
        // Path /medaverter/appointments
    });
});

Это будет go до tekknow.net/medaverter и tekknow.net/medaverter/appointments соответственно. Вы также можете создать другой префикс, такой как testing, настроить таким же образом и go до tekknow.net/testing или tekknow.net/testing/whatever.

Префиксы пространства имен

Когда вы группируете маршруты по префиксу маршрута, вероятно, их контроллеры имеют похожее пространство имен PHP. В примере medaverter все контроллеры маршрутов medaverter могут находиться в пространстве имен Medaverter.

Route::namespace('Medaverter')->group(function () {
    // App\Http\Controllers\Medaverter\AppointmentController
    Route::get('medaverter/appointments', 'AppointmentController@index');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...