.htaccessに関して教えてください。


A.htmlというページが存在している場合は、B.htmlというページにアクセスがあった場合、
A.htmlに自動ジャンプし、もしA.htmlというページが存在していない場合は、そのまま
B.htmlを表示したいのです。

下記のような記述をしましたが、「このウェブページにはリダイレクト ループが含まれています」となり、表示されません。

お助けください!


Redirect B.html A.html
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ B.html$1 [R=301,L,QSA]

以上、よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/09/26 10:50:03

回答1件)

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

「a.htmlファイルが存在するという条件のもとで、
リクエストがb.htmlだったならばa.htmlに飛ばす。」という思考でやってみてくださいな。
(下記はイメージです。実際には動かしてません。)

RewriteEngine on
RewriteCond a.html -f
RewriteRule ^b.html$ a.html [R=301,L,QSA]
他4件のコメントを見る
id:harryqueeny

ご親切、誠にありがとうございます。
勉強になります。

無限ループのような状態から抜け出せない状態でしたので、
いろいろ調べて試してみたのですが、

RewriteCond %{REQUEST_URI} !^b.html

という記述を付け足したら、動作できたような感じです。

ご教授ありがとうございました。

2012/09/21 10:30:11
id:rouge_2008
RewriteCond %{REQUEST_URI} !^b.html


上記のルールの条件を追加すると、ホスト名を除くリクエストされたURLが指定したパターンで始まらない場合、リライトルールに該当するか確認し、該当した場合に実行されますが、指定したパターンで始まる場合は、リライトルールの確認を行わないので実行もされません。
※「REQUEST_URI」は「/」から始まりますので、「RewriteCond %{REQUEST_URI} !^/b.html」のように記述しないと、どのURLにアクセスしても何も変化はない(※記述しなかった場合と同じ)はずですが、スラッシュ「/」がないのは記述ミスでしょうか?

「RewriteCond %{REQUEST_URI} !^/b.html」とスラッシュがある場合、「http://サイトのドメイン/b.html」へのアクセス時はリライトルールの確認・実行が行われません。
上記以外のアドレスへのアクセス時にリライトルールの確認・実行が行われますが、以下のリライトルールには該当しませんので、b.htmlへアクセスしてもa.htmlへのリダイレクトは実行されません。

RewriteRule ^b.html$ a.html [R=301,L,QSA]


どのリライトルールに対して「RewriteCond %{REQUEST_URI} !^/b.html」を指定したのでしょうか?
良かったら動作環境・状態をもう少し詳しく教えてください。

【※追記して再投稿※】
ブラウザを再起動するか、キャッシュを削除しませんでしたか?
「RewriteCond %{REQUEST_URI} !^b.html」がなくても動作すると思いますので、この行を削除するか無効にし、ブラウザのキャッシュを削除してから再度動作を確認してみてください。

※また少しだけ訂正しました。ほんの少しの違いですが・・・
何回もメールが届いていたらすみません。

2012/09/22 08:01:40
id:harryqueeny

ありがとうございます。

アドバイスいただいた内容で試してみましたが、うまくいきませんでした。

a.html自体を直接見にいくと、URLがループしているようでb.htmlが長く並んだURLに変化し閲覧もできませんでした。

もし対策がお分かりになるようでしたらご教授くださいませ。

よろしくお願いします。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません