Не могу найти 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
; Я поместил это вокруг записей, которые уже были там о регистрации, но вы также можете просто поместить это в конце, если вам это нравится больше. Кроме того, основы устранения неполадок переписывания включают (извинения, если это основное):
- убедитесь, что ваш httpd.conf имеет
AllowOverride All
а такжеOptions FollowSymLinks
набор для каталогов, из которых вы обслуживаете Рестлера. - Вы можете поместить всю конфигурацию в
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