Apache request_uri no escopo do VirtualHost

2

Este código funciona perfeitamente em .htaccess ou diretório

RewriteEngine on
RewriteCond %{request_uri} !^/dir/$ [NC]
RewriteRule ^(.*)$ /dir/ [END]

mas quando colocado no VirtualHost ele causa redirecionamento infinito.

Eu li a documentação sobre as diferenças entre request_uri no escopo do virtualhost e do diretório, mas ainda não consegui produzir o código que funcionará no contexto do virtualhost. O que devo mudar?

    
por ndd 14.09.2017 / 02:25

1 resposta

0

Eu acho que você provavelmente tem um conflito com o mod_dir (e o DiretcoryIndex ). Embora eu esteja surpreso, isso "funciona perfeitamente em .htaccess " (a menos que você tenha algo que impeça um loop)?

Se você reescrever para o diretório nulo, ou seja. /dir/ , em seguida, mod_dir acionará uma subrequista interna para /dir/index.php (ou qualquer que seja seu DirectoryIndex definido) e isso provavelmente acionará um loop infinito (apesar de END flag), pois /dir/index.php corresponde a !^/dir/$ .

Você deve reescrever diretamente no documento de índice e isso deve resolver o problema. Por exemplo:

RewriteEngine on
RewriteRule !^/?dir/$ /dir/index.php [END]

Você não precisa da diretiva RewriteCond que verifica em relação a REQUEST_URI , você pode fazer a mesma verificação no padrão RewriteRule - que é um pouco mais eficiente e economiza uma diretiva .

    
por 15.09.2017 / 03:13