Uma maneira de impedir que o URL sendo roteado para sua API (que é o que eu suponho que esteja acionando o 404 e não um "erro" com sua documentação do Swagger?) é simplesmente incluir uma exceção seu arquivo /API/.htaccess
para evitar que esse URL específico seja enviado para o arquivo api.php
.
Por exemplo:
RewriteEngine On
# Do not send the following URL(s) to "api.php"
RewriteRule ^Swagger/ui - [L]
# YOUR CURRENT API RULES CONTINUE HERE...
Portanto, se a URL solicitada começar com /API/Swagger/ui
, o processamento será interrompido e não continuará pelas diretivas restantes do mod_rewrite.
No entanto, dependendo de como seu URL "Swagger" é roteado e se Swagger
(e ui
) são subdiretórios físicos, talvez haja maneiras melhores de fazer isso.
ATUALIZAÇÃO: Visto que, dos comentários, /API/Swagger/ui
é um diretório físico, então um método alternativo ao acima de editar o arquivo /API/.htaccess
é simplesmente criar uma% adicional.htaccess
no subdiretório /Swagger
ou /Swagger/ui
e ative o mecanismo de reescrita. Por exemplo:
RewriteEngine On
mod_rewrite não é herdado por padrão, portanto, isso deve ter o efeito de substituir completamente as diretivas-pai associadas à sua API. Isso evita a necessidade de editar o arquivo .htaccess
da API.
Aside: Suas diretivas atuais parecem um pouco estranhas. Primeiro você roteia todas as solicitações que não mapeiam para diretórios físicos ou arquivos (de tamanho) para o seu script de API. Mas então você vai em frente e rotear todos os pedidos que fazem, para o seu script de API de qualquer maneira?
UPDATE: I know why I'm getting a 404. The code in the API checks for a query variable called
rquest
. If it is not there, it responds with a 404
Isso só faz mais backup do meu comentário acima. A segunda e terceira regras no seu arquivo .htaccess
não contêm o rquest
URL param - então, isso parece resultar em um erro 404? Essas diretivas também impediriam que o URL de "Swagger" funcionasse.
Depois de dar uma olhada no tutorial ao qual você se vinculou, parece que a segunda regra do seu arquivo .htaccess
deve ser removida, pois não parece servir a nenhum propósito real (além de acionar um 404)? Isso também resolveria seu problema inicial de acessar sua documentação "Swagger" e evitaria ter que incluir quaisquer "exceções" ou diretivas adicionais. Em outras palavras, reduzir o arquivo /API/.htaccess
para o seguinte também deve "funcionar":
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ api.php?rquest=$1 [QSA,L]
No entanto, manter a "exceção", como mencionado na parte superior da minha resposta, ainda é ótimo , pois evita as verificações desnecessárias do sistema de arquivos ao acessar sua documentação "swagger".