Symfony 4 - Как исправить '404 Not Found' для веб-API REST, где существуют маршруты? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь реализовать REST API с помощью symfony 4. Моя проблема в том, что я не могу добраться до своих маршрутов для своих методов GET и POST. Каждый раз, когда я пытаюсь, я получаю ошибку 404.

Но когда я пытаюсь получить маршруты на Symfony, у меня есть:

Name                            Method   Scheme   Host   Path

app_statistics_poststatistics   POST     ANY      ANY    /api/stat
app_statistics_getstatistics    GET      ANY      ANY    /api/stat/{statId}

Так что мои маршруты существуют, но я не могу их достичь.

Я работаю в среде Windows с WAMP для локальной работы.

Я уже попробовал свой API на среде с двумя окнами и на одной среде Linux с LAMP. Всегда получаю 404 Not Found.

Автор учебника сказал мне, что мой API работает на его компьютере, но у меня нет больше информации о его среде. Итак, я ожидаю, что проблема возникнет из-за конфигурации моего виртуального хоста.

Вот мой виртуальный хост:

<VirtualHost *:80>
    ServerName statroche.fr
    ServerAlias www.statroche.fr
    DocumentRoot "D:/other/symfony/testRoche/public"
    <Directory "D:/other/symfony/testRoche/public">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

Важное замечание: у меня нет ничего в моей общей папке, так как я не хочу ни одной страницы, только API, мне все еще нужно поместить 'public' в DocumentRoot и Directory?.

Я хотел бы обратиться к своему API, а затем для метода GET, например, вернуть json. На самом деле, я могу достичь / моего проекта, но не могу добраться до других маршрутов.

Ответы [ 2 ]

0 голосов
/ 11 января 2019

вместо

<Directory "D:/other/symfony/testRoche/public">

Укажите папку apache. Путь к основной папке вашего проекта Symfony, как это

<Directory "D:/other/symfony/testRoche">

Затем используйте файл .htaccess (поместите его в D:/other/symfony/testRoche/.htaccess, чтобы сделать public / index.php в качестве основной конечной точки, если вы перейдете к http://localhost:80

Полная конфигурация Apache

<VirtualHost *:80>
    ServerName statroche.fr
    ServerAlias www.statroche.fr
    DocumentRoot "D:/other/symfony/testRoche/public"
    <Directory "D:/other/symfony/testRoche/public">
        Options +Indexes +Includes +FollowSymLinks +MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

.htaccess файл

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule !\.(js|gif|jpg|png|css|txt)$ public/index.php [L]
    RewriteCond %{REQUEST_URI} !^/public/
    RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
0 голосов
/ 11 января 2019

Даже если вы не хотите создавать «старый сайт» с Symfony, вы должны использовать index.php для загрузки Symfony и сделать API доступным

...