mod_rewriteを使用して、SSLを使用するように特定のページをリダイレクトしようとしています。そのために私は持っています:
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]
これは正常に機能し、私が望んでいることを正確に実行します。
後で私の.htacessに私は持っています:
RewriteRule ^members/(.+)/change-password$ members/.change-password.php?item=$1 [NC,QSA,L]
したがって、URLが次のように表示される場合:
http://www.example.com/members/foo-bar/change-password
内部的には、次のように処理されます。
/members/.change-password.php?item=foo-bar
繰り返しますが、これは正常に機能し、私もやりたいことを実行しています。
私が今やらなければならないことは、これを元のSSLリダイレクトロジックに含めて、パスワード変更要求が同じURLにリダイレクトされるようにすることですが、代わりにhttpsを介してリダイレクトされます。私はもう試した:
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]
しかし、これは機能しません。ページをhttp経由で配信するだけです。をに変更すると、永続的なリダイレクトループに陥るよう.+
に見えます。.*
これは内部の書き換えによるものだと思いますが、何を試しても解決できないようです。
誰かアドバイスしてもらえますか?
ありがとう、
アダムM。