reescrita não funciona com links simbólicos

1

Queremos exibir uma imagem como o apache é muito bom em fazer e, quando o cliente solicita uma miniatura, a solicitação será semelhante à seguinte: [ link (w200 é a largura solicitada da miniatura).

Às vezes, as miniaturas não existirão. Quando eles não existem, queremos que o apache encaminhe o pedido para o nosso aplicativo. Essa solicitação será semelhante a [ link . O aplicativo criará a miniatura e redirecionará para a solicitação original.

Isso funcionou bem quando eu tinha arquivos e diretórios normais em / home / dev / x / y / mediadir. No entanto, / home / dev / x / y / mediadir / photos é agora um link simbólico para o diretório / home / dev / photos. Então agora, mesmo quando o arquivo existe, ele está sempre passando o! -F RewriteCond e reescrevendo para a miniatura da foto.

Coisas que tentei:

  • o servidor tem acesso aos diretórios do symlink. Quando eu tiro o bloco de reescrita, funciona bem
  • Eu tentei! -l,! -F e! -U. ! -U atende o arquivo quando existe, mas quando não existe, o apache não reescreve o pedido. ! -l, e! -F faz o mesmo que! -f

Alguém tem alguma sugestão?

<VirtualHost *:443>

        #... cut ...

    RewriteLog /home/dev/logs/rewrite.log
    RewriteLogLevel 3

    Alias /media/ /home/dev/x/y/mediadir/
    <Directory /home/dev/x/y/mediadir>
        Order allow,deny
        Allow from all
        Options FollowSymLinks

        RewriteEngine on
        RewriteCond photos/../$ !-f
        RewriteRule ^photos/../(.+)$ https://%{HTTP_HOST}/create_thumbnail?file=$1
    </Directory>
    
por Frank Henard 05.05.2011 / 23:21

2 respostas

2

Em vez de usar um RequestCond ( RewriteCond photos/../$ !-f ), usei dois. O primeiro para verificar se o REQUEST_FILENAME corresponde ao regex e o segundo para verificar se o arquivo não existe. Isso está funcionando bem para mim.

    RewriteCond %{REQUEST_FILENAME} photos/../.+
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^photos/../(.+)$ https://%{HTTP_HOST}/create_thumbnail?file=$1
    
por 09.05.2011 / 22:05
0

Estou um pouco confuso sobre quais são os seus caminhos, porque você se refere a / mediadir, mas não existe / mediadir (referenciado pelo root; não no sistema de arquivos, nem no apache). Então, eu realmente não sei o que você quer dizer, mas talvez você possa consertar isso adicionando:

<Directory /path/to/photos/>
    Order allow,deny
    Allow from all
</Directory>

O que o seu registro de reescrita diz?

    
por 06.05.2011 / 00:03