Reescreva a menos que exista recurso

1

Eu tenho a seguinte regra de reescrita que converte example.com/anything/ para carregar a página em example.com/anything.html

RewriteRule ^([A-Za-z0-9-]+)/?$ $1.html [L]

Eu preciso de uma exceção a essa regra quando existe um diretório ou arquivo físico. Por exemplo, se houver um diretório físico em example.com/test/ , ele deverá carregar um índice do diretório /test/ , em vez de reescrevê-lo em example.com/test.html

Eu acredito que preciso reescrever as condições RewriteCond com !-d e !-f semelhante a:

link

Estou com problemas para descobrir como escrever essas condições.

Solução:

Prefixando a condição:

RewriteCond %{REQUEST_FILENAME} !-d

Permite que os diretórios sejam lidos como normalmente seriam. Além disso, minha correspondência de padrão regex não considera nomes de arquivo com extensões (sem um ponto . ), portanto, arquivos como example.css também serão lidos como de costume.

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-]+)/?$ $1.html [L]
    
por asdfqwerzxcv 05.02.2018 / 22:16

1 resposta

0

Sim, como você sugere, você precisa de uma condição adicional para testar se não é um diretório. Por exemplo, em .htaccess :

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([A-Za-z0-9-]+)/?$ $1.html [L]

O negado !-d verifica se REQUEST_FILENAME não mapeia para um diretório. A variável REQUEST_FILENAME (em um diretório ou .htaccess context) contém o caminho absoluto do sistema de arquivos do arquivo / diretório para o qual a solicitação é mapeada.

Eu não acho que você precise verificar arquivos , já que um arquivo não deve corresponder ao padrão RewriteRule ^([A-Za-z0-9-]+)/?$ - a menos que você tenha arquivos sem extensões de arquivo?

Nos documentos do Apache , você vincula:

RewriteCond "/var/www/my_blog/%{REQUEST_FILENAME}" !-d

O formato desta diretiva não parece correto para mim, considerando que o exemplo mostra que está sendo usado em um contexto diretório . (Esse formato pode ser necessário em um contexto servidor ou virtualhost , quando REQUEST_FILENAME é igual a REQUEST_URI - o caminho da URL da solicitação. essa variável então começa com uma barra , então o que está acima ainda está incorreto ?!)

    
por 06.02.2018 / 00:02