Не могу найти resources.json

По какой-то причине, когда я развертываю свой API, используя API Проводника Рестлера (разветвленный интерфейс Swagger), он дает мне общую ошибку 404 при загрузке:

/api/explorer

Когда я более четко и заявляю:

/api/explorer/index.html

Он загружает кадрирование страницы, но затем выдает сообщение "404: Not Found ../resources.json" красным текстом под заголовком:

Я вполне уверен, что что-то вспыхивает, так как локально работают те же файлы. Я также проверил файл.htaccess в /api/explorer каталог, и это выглядит правильно для меня:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^$ index.html [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.html [QSA,L]
</IfModule>

Любая помощь будет оценена.

4 ответа

Решение

Оказывается, все проблемы были связаны с проблемой mod_rewrite. Я до сих пор не на 100% ПОЧЕМУ эта проблема обнаружилась в одной среде, но не в других с точно такой же httpd.conf а также .htaccess, О, хорошо, решение должно быть явным в правиле переписывания вашей базовой ссылки с помощью RewriteBase директивы.

В каталоге API у меня теперь есть следующее .htaccess файл:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /api
    RewriteRule ^$ index.php [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

В каталоге API-Explorer у меня теперь есть следующее .htaccess:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /api/explorer
    RewriteRule ^$ index.html [QSA,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.html [QSA,L]
</IfModule>

Чтобы устранить эту проблему, один бесценный совет, с которым я столкнулся, включает ведение журнала Apache mod_rewrite.

# Adding logging for Rewrites
RewriteLog logs/rewrite.log
RewriteLogLevel 2

Поместите это в любую глобально ограниченную область httpd.conf; Я поместил это вокруг записей, которые уже были там о регистрации, но вы также можете просто поместить это в конце, если вам это нравится больше. Кроме того, основы устранения неполадок переписывания включают (извинения, если это основное):

  1. убедитесь, что ваш httpd.conf имеет AllowOverride All а также Options FollowSymLinks набор для каталогов, из которых вы обслуживаете Рестлера.
  2. Вы можете поместить всю конфигурацию в httpd.conf и избегать .htaccess файлы в целом (и это тоже немного быстрее), но если вы это сделаете, помните, что httpd.conf имеет абсолютную ссылку на URL по сравнению с .htaccessродственник

Вы добавили класс Luracast\Restler\Resources для создания resources.json в корне API?

В вашем собственном index.php раздел addAPIClass должен выглядеть так:

$r = new Restler();

$r->addAPIClass('Luracast\\Restler\\Resources'); //this creates resources.json at API Root

// ... your own addApiClass

$r->handle();

Это находится в документации в разделе "Использование", но у меня были проблемы с выяснением этого также...

Вы можете проверить файл ReadMe на странице Restler Github https://github.com/Luracast/Restler-API-Explorer

Убедитесь, что у вас есть каталог кэша с правами на запись в вашем корне API

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