HTTPS / HTTP redireciona via .htaccess

1

Eu tenho um problema complicado que estou tentando resolver. Eu usei a seguinte diretiva .htaccess para ativar algum tipo de URLs bonitas, e isso funcionou bem. Por exemplo, o link seria redirecionado para o link , e que estava funcionando bem (note que coisas como myurl.com/css/mycss.css) não são redirecionadas:

RewriteEngine on
RewriteCond ${REQUEST_URI} !^(index\.php$)
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^/?(.*)$ index.php/$1 [L]

Mas agora, à medida que introduzi o SSL na minha página, quero o seguinte comportamento: Eu basicamente quero o comportamento acima para todas as páginas, exceto admin.php e login.php. As solicitações para essas duas páginas devem ser redirecionadas para a parte HTTPS, enquanto todas as outras solicitações devem ser processadas conforme especificado acima.

Eu criei o seguinte .htaccess, mas não funciona. h tps: //myurl.com/shop não é redirecionado para h tp: //myurl.com/index.php/shop eh tp: //myurl.com/ admin.php não é redirecionado para h tps: //myurl.com/admin.php.

RewriteEngine on

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^(admin\.php$|login\.php$)
RewriteRule ^(.*)$ http://%{HTTP_HOST}/${REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^(admin\.php$|login\.php$)
RewriteRule ^(.*)$  https://myurl.com/%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_URI} !^(index\.php$)
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^/?(.*)$ index.php/$1 [L]

Eu sei que tem algo a ver com regras que se sobrepõem umas às outras, mas não tenho certeza, pois meu conhecimento sobre o Apache é bastante limitado. Como eu poderia consertar esse problema aparentemente não tão difícil, e como eu poderia tornar meu htaccess mais compacto e elegante?

A ajuda é muito apreciada, obrigado!

    
por Winston 19.03.2012 / 11:20

1 resposta

1

Eu tenho que responder dessa maneira, porque minha conta temporária (ou seja, cookie) está perdida. Enfim, encontrei algumas coisas interessantes.

Corrigi o problema com o principal / em REQUEST_URI, sobre o qual você me falou.

Eu digitei as diretivas RewriteLog e RewriteLogLevel na configuração global do Servidor (que deve se aplicar a HTTP E HTTPS, certo?).

Então eu descobri que todas as solicitações HTTP foram processadas corretamente e como desejadas (!), como eu vi no log, mas as solicitações com HTTPS não foram registradas em log! Então eu suponho que o log não está configurado corretamente ou (e é isso que eu temo) que solicitações via HTTPS não passam pelo procedimento mod_rewrite.

Mais uma vez, estou usando um arquivo .htaccess para definir minhas regras de reconfiguração.

Portanto, o problema real agora é que tudo sobre HTTP é reescrito corretamente, mas quando eu tenho um pedido como o link , Eu quero que ele seja redirecionado para link , porque não é admin.php nem login.php.

E eu não entendi a parte com "(não há necessidade de um RewriteCond separado, na verdade)". Obrigada!

Abaixo do meu arquivo .htaccess atualizado.

RewriteEngine on

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/(admin\.php$|login\.php$)
RewriteRule ^(.*)$ http://%{HTTP_HOST}${REQUEST_URI} [R=301,L]

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/(admin\.php$|login\.php$)
RewriteRule ^(.*)$  https://myurl.org%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_URI} !^/(index\.php$)
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^/?(.*)$ index.php/$1 [L]
    
por 20.03.2012 / 11:14