Como evitar o loop de redirecionamento infinito no htaccess?

2

Nosso domínio.com/app/index.php está carregando domain.com/blog em um iframe.

Então, minhas regras de redirecionamento devem ser assim:

- domain.com/              => /app/index.php
- domain.com/blog(.*)      => /app/index.php?(.*)

A segunda regra existe porque se alguém quiser ir diretamente ao blog, nós executamos nosso aplicativo primeiro e colocamos o blog no iframe e anexamos a string de consulta à tag src do iframe para que ele abra não na página inicial, mas no URL solicitado.

O problema é que, como estou redirecionando tudo na minha primeira regra, o iframe acaba em loop infinito. Ele tenta se colocar dentro de outro iframe dentro de seu próprio iframe indefinidamente.

Existe uma maneira de atribuir um Env var de modo que, se o redirecionamento for feito, ele não seja repetido?

Ou para abordar claramente o problema, nunca quero que o blog seja aberto sem o aplicativo. Como deve ser meu htaccess?

Obrigado D

ps: queremos fazer isso no htaccess, já que os redirecionamentos do php + js são ineficientes e feios.

    
por Devrim 24.11.2009 / 10:14

4 respostas

2

Você pode investigar a diretiva RewriteCond para aplicar condicionalmente o RewriteRule. No entanto, isso não será estritamente necessário se o seu RewriteRule corresponder explicitamente o início e o fim do URL esperado para redirecionar, por exemplo,


RewriteRule ^/$ /app/index.php [L]

Observe que o redirecionamento pode ser interno ou externo. Se você fornecer explicitamente o sinal [R] ao seu RewriteRule, o navegador será informado sobre o novo URL a ser buscado. Caso contrário, o Apache tentará buscar a regra reescrita internamente sem informar o navegador do URL real buscado.

Por último, você pode usar as diretivas mod_rewrite ( RewriteEngine , RewriteCond , RewriteRule ) no seu arquivo .htaccess .

    
por 24.11.2009 / 12:13
1

Eu publiquei um tutorial sobre como evitar loops infinitos que você pode achar úteis. Existe um grande problema ao criar regras de regravação para URLs sem uma barra final. Espero que te dê uma ideia. -scout

    
por 06.12.2009 / 00:12
0

Você pode tentar suas chances com o mod_rewrite. Com algo parecido com isso no .htaccess:

RewriteEngine On

RewriteRule /blog/(.*) /app/index.php?$1 [R]
RewriteRule ^index.php$ /app/index.php [R]
    
por 24.11.2009 / 10:49
0

Em teoria, já existe um env var que faz o trabalho:

RewriteCond     %{ENV:REDIRECT_STATUS}          200
RewriteRule     .*              -               [L]

Mas não tenho certeza se funciona ... (nunca tive que usar esse recurso.)

    
por 10.06.2014 / 17:50