Permitir diretório no .htaccess

1

Eu tenho esse arquivo .htaccess instalado na minha pasta API. Está sendo usado para redirecionar todas as solicitações para o script 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>  

Agora, adicionei uma documentação do Swagger para minha API e preciso acessá-la usando este URL: localhost/API/Swagger/ui . Eu continuo recebendo um 404 quando tento visitar essa URL.

Atualmente, configure usando o WAMP, mas será implantado no servidor de produção assim que eu tiver tudo testado. Eu posso acessar as funções da API como esta bem: localhost/API/GetMakes?year=2010

Alguma ideia sobre o que fazer?

    
por MB34 01.06.2018 / 22:13

1 resposta

1

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

    
por 01.06.2018 / 23:01