Я установил этот файл .htaccess в API моей папки. Он используется для перенаправления всех запросов на скрипт api.php.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ api.php?rquest=$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ api.php [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^(.*)$ api.php [QSA,NC,L]
</IfModule>
Теперь я добавил некоторую документацию Swagger для моего API, и мне нужно иметь доступ к нему, используя этот URL: localhost / API / Swagger / ui
. Я продолжаю получать 404, когда пытаюсь посетить этот URL.
В настоящее время настраивается с использованием WAMP, но будет развернуто на рабочем сервере, как только я все протестирую. Я могу без проблем получить доступ к таким функциям API: localhost / API / GetMakes? Year = 2010
Есть идеи, что делать?
Один из способов предотвратить маршрутизацию URL к вашему API (что, как я предполагаю, инициирует 404, а не "ошибку" с документацией Swagger?) - просто включить исключение в ваш /API/. htaccess
файл, чтобы предотвратить подачу этого конкретного URL в ваш api.php
файл.
Например:
RewriteEngine On
# Do not send the following URL(s) to "api.php"
RewriteRule ^Swagger/ui - [L]
# YOUR CURRENT API RULES CONTINUE HERE...
Итак, если запрашиваемый URL начинается с /API/Swagger/ui
, то обработка останавливается и не продолжается через оставшиеся директивы mod_rewrite. Однако, в зависимости от того, как маршрутизируется URL "Swagger" и является ли Swagger
(и ui
) физическими подкаталогами, возможно, существуют лучшие способы сделать это.
UPDATE: Поскольку из комментариев следует, что /API/Swagger/ui
является физической директорией, то это альтернативный метод редактирования /API/. htaccess
, заключается в том, чтобы просто создать дополнительный файл .htaccess
в подкаталоге /Swagger
или /Swagger/ui
и включить механизм перезаписи. Например:
RewriteEngine On
mod_rewrite не наследуется по умолчанию, так что это должно иметь эффект полного переопределения родительских директив, связанных с вашим API. Это избавит вас от необходимости редактировать файл API .htaccess
.
Aside: Ваши текущие директивы выглядят немного странно. Сначала вы перенаправляете все запросы, которые не сопоставляют с вашим API скриптом в физические каталоги или файлы (размером). Но затем вы направляете все запросы, которые делают, на ваш API скрипт в любом случае?
UPDATE: Я знаю, почему я получаю 404. Код в API проверяет переменную запроса с именем
rquest
. Если ее там нет, то она отвечает 404
Это только еще раз подтверждает мой комментарий, приведенный выше. Второе и третье правила в вашем файле .htaccess
не содержат URL параметра rquest
- так что кажется, что они просто приводят к 404? Эти директивы также препятствуют работе вашего URL "Swagger".
Просмотрев учебник, на который вы ссылались, вы увидите, что второе правило из третьего правила в вашем файле .htaccess
должно быть просто удалено, так как они, кажется, не служат никакой реальной цели (кроме как запуск 404)? Это также решит вашу первоначальную проблему доступа к документации "Swagger" и избежит необходимости включать какие-либо "исключения" или дополнительные директивы. Другими словами, сокращение вашего /API/.htaccess
файла до следующего должно также "работать":
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ api.php?rquest=$1 [QSA,L]
Однако, сохранение "исключения", как упоминалось в начале моего ответа, все еще оптимально , так как это предотвращает ненужные проверки файловой системы при доступе к вашей документации "swagger".
.