mod_rewrite com redirecionamento externo e reescrita interna
Eu estou tentando usar mod_rewrite para redirecionar certas páginas para usar SSL. Para isso eu tenho:
<code>RewriteCond %{SERVER_PORT} ^443$ RewriteCond %{REQUEST_URI} !^/login(\.php)?$ [NC] RewriteCond %{REQUEST_URI} !^/contact-us(\.php)?$ [NC] RewriteCond %{REQUEST_URI} !^/\..*$ RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] RewriteCond %{HTTP_HOST} !^dev\.example\.com$ [NC] RewriteCond %{SERVER_PORT} ^80$ RewriteCond %{REQUEST_URI} ^/login(\.php)?$ [NC,OR] RewriteCond %{REQUEST_URI} ^/contact-us(\.php)?$ [NC] RewriteRule ^(.+)\.php$ https://www.example.com/$1 [R=301,L] </code>
Isso funciona bem e faz exatamente o que eu quero fazer.
Mais tarde na minha .htacess eu tenho um:
<code>RewriteRule ^members/(.+)/change-password$ members/.change-password.php?item=$1 [NC,QSA,L] </code>
Então, se um URL aparecer como, por exemplo:
<code>http://www.example.com/members/foo-bar/change-password </code>
Internamente, seria processado como:
<code>/members/.change-password.php?item=foo-bar </code>
Mais uma vez, isso funciona bem e está fazendo o que eu quero também.
O que eu preciso agora é incluir isso em minha lógica original de redirecionamento de SSL para garantir que quaisquer solicitações de alteração de senha sejam redirecionadas para o mesmo URL, mas por cima de https. Eu tentei:
<code>RewriteCond %{SERVER_PORT} ^443$ RewriteCond %{REQUEST_URI} !^/login(\.php)?$ [NC] RewriteCond %{REQUEST_URI} !^/contact-us(\.php)?$ [NC] RewriteCond %{REQUEST_URI} !^/\..*$ RewriteCond %{REQUEST_URI} !^/members/.+/change-password [NC] RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] RewriteCond %{HTTP_HOST} !^dev\.example\.com$ [NC] RewriteCond %{SERVER_PORT} ^80$ RewriteCond %{REQUEST_URI} ^/login(\.php)?$ [NC,OR] RewriteCond %{REQUEST_URI} ^/contact-us(\.php)?$ [NC,OR] RewriteCond %{REQUEST_URI} ^/members/.+/change-password [NC] RewriteRule ^(.+)\.php$ https://www.example.com/$1 [R=301,L] </code>
Mas isso não funciona - eu apenas recebo a página em http. Alterando a.+
para.*
parece me colocar em um loop de redirecionamento permanente.
Eu estou supondo que isso é por causa da reescrita interna, mas não importa o que eu tente, não consigo resolvê-lo.
Alguém pode por favor avisar?
Obrigado,
Adam M.