Eu li artigos por algumas horas agora, mas como não há saída do console para depurar arquivos htaccess, cheguei à frustração total.
Estrutura de pastas feia:
/html/api/v2/estimates/index.php?status=completed
/html/api/v2/estimate/index.php?id=1001
/html/api/v2/proposals/index.php?status=accepted
/html/api/v2/proposal/index.php?id=1001
/html/api/v2/contracts/index.php?status=signed
/html/api/v2/contract/index.php?id=1001
/html/api/v2/invoices/index.php?status=sent
/html/api/v2/invoice/index.php?id=1001
Estrutura de pastas desejada:
/html/api/v2/estimates/completed
/html/api/v2/estimate/1001
/html/api/v2/proposals/accepted
/html/api/v2/proposal/1001
/html/api/v2/contracts/signed
/html/api/v2/contract/1001
/html/api/v2/invoices/sent
/html/api/v2/invoice/1001
Meu .htaccess numérico só funciona se eu os colocar nos diretórios orçamento, proposta, contrato e fatura .
Exemplo:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(\d+)/?$ index.php?id=$1
</IfModule>
Minha string .htaccess só funciona se eu colocá-las em diretórios de orçamentos, propostas, contratos e faturas .
Exemplo:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(\w+)/?$ index.php?status=$1
</IfModule>
O que preciso modificar nesses scripts acima se for colocar o arquivo htaccess na /v2
pasta?
Tente o seguinte no
/v2/.htaccess
arquivo:A regra "numérica" deve estar antes da regra "string" para evitar conflitos. A regra "string" venceria todas as vezes com o regex atual.
O primeiro
(\w+)
subpadrão em cada regra captura o subdiretório (estimate
,estimates
, etc.). Você não parece precisar verificar explicitamente o subdiretório pelo nome, a menos que haja um conflito potencial. por exemplo./estimates/1234
será naturalmente pego pela 1ª regra, não pela segunda, o que provavelmente seria a intenção - mas isso depende se/estimates/1234
é uma URL válida ou não para começar. (Isso talvez possa ser resolvido simplesmente verificando o finals
do nome do diretório?)Observe que
\w
corresponde aa-z
,A-Z
e (sublinhado). Se o subdiretório e/ou "string" são apenas letras (ou mesmo apenas letras minúsculas), o padrão deve ser mais restritivo. Se esse fosse o caso, a ordem das regras não importaria, pois eliminaria o conflito.0-9
_
Você não parece precisar das verificações (relativamente caras) do sistema de arquivos, já que o regex "restritivo" não deve corresponder a um arquivo real (a menos que você tenha arquivos no sistema de arquivos que não tenham extensões de arquivo? acho.).
O
<IfModule>
wrapper não é necessário, pois essas regras são obrigatórias para o funcionamento do seu site.ATUALIZAÇÃO: Observe que também removi a verificação de diretório . Se você tiver subdiretórios adicionais do formulário
/estimates/<subdir>
etc., essas diretivas podem corresponder, tornando o diretório inacessível (ele é roteado para o seu script, o que eu esperaria acionar um 404). No entanto, você normalmente não deseja conceder ao usuário acesso direto aos próprios diretórios de qualquer maneira - normalmente eles retornarão um 403. Os arquivos dentro desses diretórios ainda estarão acessíveis, então é improvável que isso seja um problema, eu acho.