regra mod_rewrite

1

Eu preciso de uma regra mod_rewrite que envie todos os pedidos para index.php, a menos que a solicitação seja para qualquer coisa na pasta / media /.

Eu tenho uma regra semelhante para o lighttpd, mas não sei o suficiente sobre o regex / mod_rewrite para alterá-lo para o Apache.

        url.rewrite-once = (
            "/(media)/(.*)" => "/$1/$2",
            "^([^\?]*)(\?(.+))?$" => "/index.php?url=$1&$3",
    )

Obrigado

    
por bufferoverflow 14.01.2011 / 18:25

2 respostas

3

Fazendo algumas correções na resposta de Redmumba ...

RewriteEngine on
RewriteMap esc int:escape
RewriteCond $0 !^/media/
RewriteRule .* /index.php?url=$0\%3f${esc:%{QUERY_STRING}} [B]

Use o $0 backreference em vez de %{PATH_INFO} para se referir ao caminho de entrada. No RewriteRule , adicione o sinalizador B para escapar novamente do URL (conforme explicado no mod_rewrite docs ). O restante da regra está presente para permitir a duplicação da string de consulta original, para que ela possa ser recuperada quando o parâmetro url não estiver em escape pelo seu index.php .

Como alternativa, se o seu index.php espera usar sua string de consulta diretamente, em vez de decodificá-la de dentro do parâmetro url , você usaria

RewriteEngine on
RewriteCond $0 !^/media/
RewriteRule .* /index.php?url=$0 [B,QSA]

Esta é realmente uma tradução mais fiel da regra de reescrita do LighTTPD, mas você corre o risco de um conflito caso a string de consulta de entrada contenha um parâmetro url .

    
por 14.01.2011 / 22:54
0

Basicamente, você fará as mesmas coisas, chamando apenas RewriteRule em vez de url.rewrite-once . Além disso, uma melhoria que poderia ser feita para ambos é usar um RewriteCond para corresponder à parte da mídia.

RewriteEngine on
RewriteCond %{PATH_INFO} !^/media/.*
RewriteRule ^([^\?]*)(\?(.+))?$ /index.php?url=$1&$3

Dessa forma, você não precisará reescrever a regra para / media - isso verifica se ela não começa com /media e a reescreve. Se isso acontecer, apenas passa adiante.

Espero que isso ajude!

    
por 14.01.2011 / 21:31