mod_rewrite z zewnętrznym przekierowaniem i wewnętrznym przepisem

Próbuję użyć mod_rewrite do przekierowania niektórych stron, aby używać SSL. Do tego mam:

<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>

To działa dobrze i robi dokładnie to, co chcę.

Później w mojej .htacess mam:

<code>RewriteRule ^members/(.+)/change-password$ members/.change-password.php?item=$1 [NC,QSA,L]
</code>

Więc jeśli URL pojawia się na przykład:

<code>http://www.example.com/members/foo-bar/change-password
</code>

Wewnętrznie będzie przetwarzany jako:

<code>/members/.change-password.php?item=foo-bar
</code>

Ponownie działa to dobrze i robi to, co chcę.

Teraz muszę to uwzględnić w mojej oryginalnej logice przekierowania SSL, aby upewnić się, że wszelkie żądania zmiany hasła są przekierowywane na ten sam adres URL, ale zamiast tego na https. Próbowałem:

<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>

Ale to nie działa - po prostu dostaję stronę przez http. Zmienianie.+ do.* wydaje się, że wprowadza mnie w stałą pętlę przekierowania.

Zgaduję, że to z powodu wewnętrznego przepisywania, ale bez względu na to, co spróbuję, nie mogę go rozwiązać.

Czy ktoś może doradzić?

Dzięki,

Adam M.

questionAnswers(1)

yourAnswerToTheQuestion