У меня есть этот файл .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
) являются физическими подкаталогами, тогда могут быть лучшие способы сделать это.
ОБНОВИТЬ: Поскольку из комментариев следует, что /API/Swagger/ui
является физическим каталогом, то это альтернативный метод редактирования вышеупомянутого /API/.htaccess
файл, просто создать дополнительный .htaccess
файл в /Swagger
или /Swagger/ui
подкаталог и включите механизм перезаписи. Например:
RewriteEngine On
mod_rewrite не наследуется по умолчанию, поэтому это должно иметь эффект полного переопределения родительских директив, связанных с вашим API. Это избавляет вас от необходимости редактировать API .htaccess
файл.
В стороне: Ваши текущие директивы кажутся немного странными. Сначала вы маршрутизируете все запросы, которые не сопоставить физические каталоги или файлы (определенного размера) с вашим скриптом API. Но затем вы все равно перенаправляете все запросы в свой скрипт API?
ОБНОВИТЬ: Я знаю, почему получаю 404. Код в API проверяет переменную запроса с именем
rquest
. Если его нет, он отвечает 404
Это только подтверждает мой комментарий выше. Второе и третье правила в вашем .htaccess
файл не содержит rquest
Параметр URL - может показаться, что это просто приводит к 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]
Однако сохранение «исключения», как упоминалось в верхней части моего ответа, по-прежнему оптимальный, так как это предотвращает ненужные проверки файловой системы при доступе к вашей "чванливой" документации.