Estou usando o seguinte URL de reconfiguração para obter URLs mais bonitas:
RewriteRule (\d+)/(.+) $2?companyId=$1 [NC,L,B,QSA,NE]
O url /invoices.php?companyId=123
pode, por exemplo, ser expresso como /123/invoices.php
. Eu testei e funciona bem.
O problema é que alguns dos meus arquivos php fazem referência a imagens e javascript por urls relativos, exemplo js/jquery.js
. Eu pensei que esses arquivos também seriam cobertos pelo meu URL de reescrita, o que é bem genérico, mas aparentemente isso não acontece e retorna um 404.
Exemplo:
Acessar /123/js/jquery.js
no navegador retorna um erro 404: The requested URL /js/jquery.js was not found on this server.
Observe como a mensagem de erro se refere ao nome do arquivo que foi reconfigurado para o nome do arquivo correto. Se eu copiar e colar o URL da mensagem de erro no campo de URL do meu navegador (omitir a regra de reconfiguração), ele retornará o arquivo!
A única diferença entre o arquivo php (que funciona) e minhas imagens / arquivos javascript é que o último reside em sub-diretórios em vez de no nível da raiz.
Colocar meu arquivo php na pasta /test
sub produz o mesmo problema, por exemplo:
/35/test/invoices.php
= > The requested URL /test/invoices.php was not found on this server.
Novamente, mod_rewrite alterou o caminho como esperado, mas o apache não consegue localizar o arquivo. Acessá-lo diretamente funciona bem.
O problema com javascripts e imagens pode ser facilmente resolvido usando caminhos absolutos, já que eles não precisam do parâmetro companyId. No entanto, abaixo da estrada, eu posso querer estruturar meus arquivos php em sub-diretórios, então eu preciso de uma correção para isso agora.
Alguém sabe por que o apache não pode encontrar arquivos em subdiretórios quando o caminho passou pelo módulo de reescrita?
Obrigado!
Geir