検索エンジン対策のため、サイト全体のURLを「wwwあり」に統一しています。
共有SSLを使って、httpsで別ドメインへアクセスさせたいのですが、うまく行きません。
以下のページを参考にしたのですが、httpsのページがループしてしまいます。
どのようにRewriteRuleを書けばよいか解決できるでしょうか?お知恵をお借りできれば幸いです。
▼参考URL
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1988&forum=2
http://www.asnext.com/web_tech/htaccess/
※詳細はコメント欄に記載します。
httpsでアクセスされた場合には共有SSLへ飛ばせば良いという条件でしょうか?
でしたら、下記のような感じになります。
---------------------------------------------
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com
RewriteRule ^/(.*)$ http://www.example.com/shop/$1 [R=301,L]
RewriteCond %{HTTPS} on [OR]
RewriteCond %{HTTP_HOST} ^example\.com [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com
RewriteRule ^(.*)$ https://secureXXX.sakura.ne.jp/example.com/test/$1 [R=301,L]
.htaccessは「example.com」のルートに設置してください。
※「http://example.com/」と「http://www.example.com/」は同じディレクトリですよね?
RewriteEngine on RewriteBase / # 共有SSLの場合は別ドメインへアクセス RewriteRule ^shop/((?:SSL1|SSL2|form).*)$ https://secureXXX.sakura.ne.jp/example.com/shop/$1 [R,L] # HOMEを/shop/に(※shopディレクトリにリダイレクト) RewriteCond %{HTTP_HOST} ^www.example.com RewriteCond $1 !^(shop) RewriteRule ^(.*)$ /shop/$1 [R=301,L] #wwwなしをwwwありに変更しつつ、shopディレクトリにリダイレクト RewriteCond %{HTTP_HOST} ^example.com RewriteRule ^(.*)$ http://www.example.com/shop/$1 [R=301,L]
※上記の例では、「RewriteCond $1 !^(shop)」で「shop」ディレクトリを除外していますが、ディレクトリを除外したい場合は、他にも以下のような書き方が出来ます。
RewriteCond %{REQUEST_URI} !/?shop/?
※除外したいディレクトリ「shop」に、さらに「RewriteEngine Off」と記述した「.htaccess」を設置しても可能なのですが、上記どちらかの条件指定で除外した方がいいと思います。
rouge_2008さん、ご回答ありがとうございます。
早速試してみましたが、エラー500で「Internal Server Error」が表示されます。
?:SSL1の「?: 」を取り除くと「Internal Server Error」は表示されなくなりますが、Firefoxでhttpsのページに限り「ページの自動転送設定が正しくありません。このアドレスへのリクエストに対するサーバの自動転送設定がループしています。」と表示されます。
SSL1、SSL2、formはディレクトリではなく、SSL1.cgi(+パラメータ)、SSL2.cgi(+パラメータ)、form.htmlのため、このようにループしてしまうのでしょうか?
またjavascript、CSS、画像などを保管しているhttp://www.example.com/js/、http://www.example.com/css/、http://www.example.com/img/などを読むことができなくなってしまいました。
「http://example.com」でアクセスされた場合だけ、「http://example.com/shop/」に飛ばすようにし、それ以外のURLはディレクトリの位置を変えることなく、wwwなしの場合にのみ、wwwありにしたいと考えています。
>「http://example.com/」と「http://www.example.com/」は同じディレクトリですよね?
はい、同じディレクトリです。
今回のご回答で初めてディレクトリを除外する方法を知り、これを使えば何とか実現できそうな気がします。
お手すきのときにご確認いただければ幸いです。
Bombastusさん、ご回答ありがとうございます。
すみません!
▼コメント欄の記載を間違えていました。/testではなく/shopです。
誤)RewriteRule ^(.*) https://secureXXX.sakura.ne.jp/example.com/test/$1 [R]
正)RewriteRule ^(.*) https://secureXXX.sakura.ne.jp/example.com/shop/$1 [R]
せっかくご回答いただいたのに前提が間違っていてご迷惑をおかけしました。
httpsがすべて別のディレクトリにあれば簡単だったのだと思いますが、同じディレクトリ内の▼以下の場合のみhttpsにしたいのです。
○共有SSLで使用されるURL:
https://secureXXX.sakura.ne.jp/example.com/shop/SSL1(.*)
https://secureXXX.sakura.ne.jp/example.com/shop/SSL2(.*)
https://secureXXX.sakura.ne.jp/example.com/shop/form(.*)
これ以外は通常通りwwwありのURLにしたいのです。
http://www.example.com/shop/(.*)
お手数をおかけして申し訳ありませんが、再度お知恵をお借りできればうれしいです。
よろしくお願いいたします。