Разрешить каталог в .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

Есть идеи, что делать?

1
задан 1 June 2018 в 23:13
1 ответ

Один из способов предотвратить маршрутизацию 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) физическими подкаталогами, возможно, существуют лучшие способы сделать это.

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".

.
1
ответ дан 3 December 2019 в 23:15

Теги

Похожие вопросы