Como interpretar essas regras de reescrita do htaccess

2

Recebi um conjunto ou reescrevo regras para um novo site. Eu nunca os usei antes e estou tentando entender o que estamos fazendo aqui

RewriteEngine on  
RewriteCond %{HTTP_HOST} .   
RewriteCond %{HTTP_HOST} !^www\.myco\.com  
RewriteRule (.*) http://www.myco.com/$1 [R=301,L]

RewriteCond $1 !^(CCSFG|images|fonts|themes|robots\.txt|index\.php) [NC]  
RewriteRule ^(.*)$ /index.php/$1 [L]

Se eu entendi isso, o primeiro conjunto de regras

RewriteCond %{HTTP_HOST} .   
RewriteCond %{HTTP_HOST} !^www\.myco\.com  
RewriteRule (.*) http://www.myco.com/$1 [R=301,L]

diz:
Se HTTP_HOST é qualquer coisa E
se HTTP_HOST não começar com www.myco.com
então,
reescreva qualquer solicitação de página para iniciar com o link , retorne um redirecionamento 301 e pare de processar mais regras

O próximo conjunto de regras

RewriteCond $1 !^(CCSFG|images|fonts|ee-system|themes|robots\.txt|index\.php) [NC]  
RewriteRule ^(.*)$ /index.php/$1 [L]

diz: Se a solicitação não iniciar com CCSFG, imagem ou fontes ou, etc. (sem distinção entre maiúsculas e minúsculas) então reescreva toda a requisição para prefixar /index.php/ e pare de processar mais regras

A minha interpretação está correta?

Se sim, qual seria o propósito do segundo conjunto de regras? Por que eu iria querer pré-adicionar /index.php/ a essas entradas?

    
por uSlackr 12.10.2011 / 23:22

1 resposta

3

Sim, praticamente exatamente.

O primeiro RewriteCond %{HTTP_HOST} . existe para não redirecionar o loop a alguém que não está enviando um cabeçalho de host - ele está verificando se a variável de cabeçalho do host contém pelo menos um caractere.

O comportamento prepending existe para forçar as solicitações de página a serem manipuladas por index.php , provavelmente para URLs bonitas - as exceções são para locais que precisam ser exibidos por um arquivo fisicamente presente.

Portanto, para /images/image2.jpg , ele permite que o Apache veicule o arquivo nesse local, mas, para /contentpage/1/2/3 , ele está reescrevendo para /index.php/contentpage/1/2/3 , permitindo que o aplicativo PHP faça sua parte.

Na verdade, está tecnicamente reescrevendo para //index.php/contentpage/1/2/3 ; é claro que ele tem uma base alterada (de estar em um arquivo de htaccess) e não leva isso em conta para o destino.

    
por 12.10.2011 / 23:48