mod_rewriteを使用して特定のページをリダイレクトしてSSLを使用しようとしています。そのために私は持っています:外部リダイレクトと内部書き換えを使用したmod_rewrite
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は、たとえば、として表示される場合:
/members/.change-password.php?item=foo-bar
:
http://www.example.com/members/foo-bar/change-password
内部的には、として処理されます
もう一度、これはうまく動作し、私もそれが欲しいものをやっている。
私が今必要とするのは、元の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.
自動リダイレクションに依存しないで、それらのセクションへのリンクが 'https://'を使用していることを確認してください。 (詳細については、[この回答](http://webmasters.stackexchange.com/a/28443/11628)と[この回答](http://stackoverflow.com/a/9105894/372643)を参照してください。) – Bruno
@Brunoレスポンスありがとうございますが、フロントエンドのリンクはhttpsに直接指定されています。自動リダイレクトの理由は、URL自体にタイプするもののためのベルトとカッコです。私が探しているユーザーエクスペリエンスを提供しないURLのhttps要求は、[F] 'できませんでしたが(誰もこのアプローチに同意しないと確信しています)。 –
アプリケーションを開発するときにこれらのリダイレクトが存在すると仮定していない限り、あなたのアプローチは確かに意味があります。 – Bruno