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.

questionAnswers(1)

yourAnswerToTheQuestion