Symfony 5: Ошибка — не найден маршрут для «GET /»

#php #symfony #web-deployment

#php #symfony #веб-развертывание

Вопрос:

Я разработал сайт с помощью sympfony / phpp, который хочу развернуть на локальном сервере.

После разработки на моем собственном компьютере (где он работает хорошо) я разместил проект на локальном сервере с apache, php 7.3.x, composer 2.0.0 под ОС debian 10

Вся передача проекта с моего компьютера на сервер и настройка полностью завершены. Имя папки проекта — si2a. Именно в каталоге /var/www я устанавливаю права доступа к этому каталогу с помощью ACL, следуя руководству symfony doc.

Я установил для файла конфигурации сайта имя si2afama.conf. Это последнее находится в каталоге /etc/apache2/sites-доступно. После настройки я активирую сайт, перезагружаю apache и очищаю кеш. Вот файл si2afama.conf, содержащий :

 <VirtualHost *:80> 
    ServerName si2afama 
    # ServerAlias www.si2afama.com 
 
    DocumentRoot /var/www/si2a/public
    DirectoryIndex /index.php
 
    <Directory /var/www/si2a/public> 
        AllowOverride All 
        Require all granted
        Allow from All 
 
    FallbackResource /index.php
 
    </Directory>
 
    <Directory /var/www/si2a/public/bundles>
        FallbackResource disabled
    </Directory>
 
    ErrorLog /var/log/apache2/si2a_error.log
    CustomLog /var/log/apache2/si2a_access.log combined 
</VirtualHost>
 

Когда я пытаюсь получить доступ к сайту, я обнаружил эту ошибку :
Маршрут не найден для «GET / si2afama»

Поскольку это иссус маршрутизации, вот некоторые файлы, которые содержат :

si2a/конфигурация/пакеты/маршрутизация.yaml

 framework:
    router:
        utf8: true
 

si2a/config.routes.yaml

 index:
    path: /
    controller: AppControllerDefaultController::index
 

si2a/public/index.php .

 <?php
use AppKernel;
use SymfonyComponentErrorHandlerDebug;
use SymfonyComponentHttpFoundationRequest;
require dirname(__DIR__).'/config/bootstrap.php';
if ($_SERVER['APP_DEBUG']) {
    umask(0000);
    Debug::enable();
}
if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) {
    Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST);
}
if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? $_ENV['TRUSTED_HOSTS'] ?? false) {
    Request::setTrustedHosts([$trustedHosts]);
}
$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
 

Я действительно не знаю, что делать, чтобы исправить проблему.

Может кто-нибудь мне помочь, пожалуйста. Спасибо.

Комментарии:

1. Я не вижу никакого маршрута с si2afama определенным именем.

2. Да, @Lounis. si2afama это имя имени файла vhost и имени сервера в этом файле. Если я понимаю, указание DocumentRoot и DirectoryIndex перенаправляют на route индекс. Верно?

3. Если нет, куда я должен добавить допустимый маршрут si2afama ?

Ответ №1:

Ваш виртуальный хостинг связан с вашим доменным именем и каталогом исходного кода, если вам нужно имя маршрута, подобное si2afama для вашего приложения, вы должны добавить его в symfony routes.

 # si2a/config.routes.yaml


index:
    path: /
    controller: AppControllerDefaultController::index

si2afama:
    path: /si2afama
    controller: AppControllerDefaultController::nameActionFromController
 

Комментарии:

1. Большое тебе спасибо @Lounis. Это исправляет проблему. Но означает ли это изменение # si2a/config/routes.yaml , что каждый раз, когда я меняю свой #ServerName на vhost , si2afama.tld например, я должен адаптировать этот файл yaml и добавить соответствующий маршрут в свой исходный код?

2. ServerName это имя хоста вашего приложения, si2afama это только маршрут, пример с этим URL: http://si2afama.tld/si2afama , эта часть http://si2afama.tld — это имя хоста, которое вы делаете таким, каким хотите, оно связано с вашим сервером (здесь apache), /si2afama это маршрут (или путь / uri), который связан с вашим приложением symfony. Вам не нужно адаптировать маршруты symfony, если вы меняете доменное имя.

Ответ №2:

попробуйте установить этот пакет composer, требующий symfony / apache-pack, он создаст файл .htaccess, который решит вашу проблему

Комментарии:

1. …:/var/www/si2a$ composer требуется symfony/ apache-pack .. Я устанавливаю этот пакет , как вы можете видеть в строке comman. Файл .htaccess был создан в каталоге /public . Проблема все еще здесь после того, как я попробовал доступ

2. проверьте, включен ли модуль mod_rewrite для Apache

3. Это с самого начала. Я включил его с помощью перезаписи a2enmod . Перезапись модуля уже включена , когда я проверяю

4. Любое другое решение? Я действительно не понимаю, в чем проблема.