Назад | Перейти на главную страницу

Разрешить каталог в .htaccess

У меня есть этот файл .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" и Swaggerui) являются физическими подкаталогами, тогда могут быть лучшие способы сделать это.

ОБНОВИТЬ: Поскольку из комментариев следует, что /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]

Однако сохранение «исключения», как упоминалось в верхней части моего ответа, по-прежнему оптимальный, так как это предотвращает ненужные проверки файловой системы при доступе к вашей "чванливой" документации.