htaccess: Não é possível verificar a existência dinâmica de caminhos de arquivos!

1

Eu escrevi um criador de miniaturas on-the-fly por um arquivo htaccess olhando para ver se o arquivo solicitado existe e se não enviando o usuário para uma página php para criá-lo. Meu arquivo htaccess se parece com isso:

# Check the formatting (this works)
RewriteCond %{SCRIPT_FILENAME}%{QUERY_STRING} /([a-zA-Z0-9-]+).(jpg|gif|png)w=([0-9]+)&h=([0-9]+)(&c=(true|false))

# Only forward to thumbnail.php if file doesn't exist
#RewriteCond %{REQUEST_FILENAME} !-f   #this works but not for the correct filename!
RewriteCond %1-%2-%3-%4-%6.jpg !-f     # Doesn't work!!!

# If file doesn't exist, send here: (this works)
RewriteRule ^.*$ thumbnail.php?file_name=%1&type=%2&w=%3&h=%4&c=%6

Minha verificação da existência do arquivo parece não funcionar ... a versão antiga que usa %{REQUEST_FILENAME} funciona, mas esse não é o nome do arquivo correto que preciso verificar. Verifiquei que o novo arquivo %1-%2-%3-%4-%6.jpg tem a saída correta, mas não aciona a condição!

Com base neste URL:

this-is-the-image-name.gif?w=200&h=100&c=true

O arquivo htaccess deve verificar se esse arquivo existe:

this-is-the-image-name-gif-200-100-true.jpg

As miniaturas e o arquivo htaccess estão na mesma pasta, mas essa pasta é desconhecida e não pode ser codificada. Precisa do caminho completo para verificar? Se sim, como posso obter o caminho completo, mas com o meu nome de arquivo personalizado?

Puxando meu cabelo com este aqui ... POR FAVOR ajude! Obrigado.

    
por RANGER 13.06.2011 / 18:51

1 resposta

1

Você está fazendo completamente errado (IMHO). Isso deve fazer o trabalho para você.

RewriteCond %{QUERY_STRING} ^w=([0-9]+)&h=([0-9]+)(&c=(true|false))
RewriteCond %{DOCUMENT_ROOT}/$1-$2-%1-%2-%4.jpg !-f
RewriteRule ^([a-z0-9\-]+)\.(jpg|jpeg|gif|png)$ thumbnail.php?file_name=$1&type=$2&w=%1&h=%2&c=%4 [NC]

1) Eu testei e funciona, mas posso estar perdendo algo que é aplicável apenas à sua configuração / sistema.

2) Isso pressupõe que as imagens em miniatura (por exemplo, this-is-the-image-name-gif-200-100-true.jpg ) estejam localizadas na pasta raiz do site (por exemplo, se o site estiver localizado /var/www/http e, em seguida, verifique o seguinte arquivo: /var/www/http/this-is-the-image-name-gif-200-100-true.jpg )

3) Se as imagens em miniatura estiverem localizadas na subpasta /thumbnails , você precisará fazer algumas pequenas alterações nas linhas # 2 e # 3.

UPDATE

Eu vi sua pergunta original: link

De acordo com suas anotações, as imagens em miniatura geradas serão armazenadas junto com a pasta thumbnail.php in /media/thumbnails/ . Com base nessa informação, as regras podem ser reescritas da seguinte maneira:

RewriteCond %{QUERY_STRING} ^w=([0-9]+)&h=([0-9]+)&c=(true|false)
RewriteCond %{DOCUMENT_ROOT}/$1/$2-$3-%1-%2-%3.jpg !-f
RewriteRule ^(media/thumbnails)/([a-z0-9\-]+)\.(jpg|jpeg|gif|png)$ /$1/thumbnail.php?file_name=$2&type=$3&w=%1&h=%2&c=%3 [NC]

Essas regras precisam ser colocadas no arquivo .htaccess raiz do site.

Você ainda pode brincar para torná-lo independente do nome da pasta (acho que você pode precisar inserir outra RewriteCondition após a primeira para verificar o caminho relativo contra% {REQUEST_URI}), mas é muito difícil para mim com arquivos imaginários sem ter preparado a infraestrutura.

    
por 16.06.2011 / 14:21