人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

.htaccessとRewriteRuleの質問です。RewriteRuleの書き方がわからず困っています。
検索エンジン対策のため、サイト全体の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/

※詳細はコメント欄に記載します。

●質問者: icta
●カテゴリ:ウェブ制作
✍キーワード:.htaccess HTTPS URL WWW アクセス
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ホーエンハイム
●35ポイント

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]

◎質問者からの返答

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/(.*)

お手数をおかけして申し訳ありませんが、再度お知恵をお借りできればうれしいです。

よろしくお願いいたします。


2 ● rouge_2008
●35ポイント

.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」を設置しても可能なのですが、上記どちらかの条件指定で除外した方がいいと思います。

http://matsui.hamazo.tv/e1710565.html

http://www.tp-hp.com/memo/tag/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/」は同じディレクトリですよね?

はい、同じディレクトリです。

今回のご回答で初めてディレクトリを除外する方法を知り、これを使えば何とか実現できそうな気がします。

お手すきのときにご確認いただければ幸いです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ