Como usar o Apache mod_rewrite e apelido, ao mesmo tempo?
-
22-07-2019 - |
Pergunta
Eu tenho um diretório fora do webroot que é usado para armazenar imagens enviadas a partir de um sistema de administração separado. As imagens são armazenadas no seguinte formato:
filepath/writable/images/00/00/23/65/filename-236581.jpg
(onde o webroot é filepath / html)
... por exemplo. Aqui, 236 é o ID da imagem no banco de dados, eo sistema de arquivos é dividido em diretórios numerados para parar mais de 100 inodes de ser usado dentro de um diretório.
Eu quero ser capaz de acessar estes a partir do servidor Web front-end, como este:
http://(server)/filename-236581.jpg
Onde nome do arquivo é uma seqüência otimizado-seo, o mesmo que o nome do arquivo real.
posso obter mod-rewrite para reescrever a URL para que ele contenha os diretórios extras numeradas, e eu posso obter alias para redirecionar a solicitação para o diretório graváveis ??/ imagens, mas não posso fazer as duas coisas ao mesmo tempo. Se eu colocar tanto o alias e directivas mod_rewrite em, ele ignora o alias e log de erro reclama que não consegue encontrar filepath / html / enviados por imagens.
Aqui está o que eu tenho até agora:
RewriteRule ^(.*)\/([^\/]*)-([0-9])\.(gif|jpg|jpeg|png)$ /uploaded-images/00/00/00/00/$2-$3.$4 [L,NC]
... e assim por diante, todo o caminho até:
RewriteRule ^(.*)\/([^\/]*)-([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])\.(gif|jpg|jpeg|png)$ /uploaded-images/$3$4/$5$6/$7$8/$9$10/$2-$3$4$5$6$7$8$9$10$11$12.$13 [L,NC]
alias /uploaded-images "filepath/writable/images"
Retirar o [L] não faz diferença.
Solução
A [L] significa passado.
O que você realmente precisa usar bem é o [PT] bandeira para indicar que o caminho resultante de sua regra de reescrita devem ser repassados ??aos próxima manipulador que no seu caso é o apelido directiva.
Como a tag [PT] também implica o [L] tag você não precisar mais [L] cabeceira.
Outras dicas
Isso [L] você tem após o meio RewriteRule "Last"
Para ser honesto, eu acreditava que isso só significou mais linhas RewriteRule seria ignorado, mas pode valer a pena conferir.