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]
以上、よろしくお願いします。
「a.htmlファイルが存在するという条件のもとで、
リクエストがb.htmlだったならばa.htmlに飛ばす。」という思考でやってみてくださいな。
(下記はイメージです。実際には動かしてません。)
RewriteEngine on RewriteCond a.html -f RewriteRule ^b.html$ a.html [R=301,L,QSA]
ありがとうございます。
アドバイスいただいた内容で試してみましたが、うまくいきませんでした。
a.html自体を直接見にいくと、URLがループしているようでb.htmlが長く並んだURLに変化し閲覧もできませんでした。
もし対策がお分かりになるようでしたらご教授くださいませ。
よろしくお願いします。
ご親切、誠にありがとうございます。
2012/09/21 10:30:11勉強になります。
無限ループのような状態から抜け出せない状態でしたので、
いろいろ調べて試してみたのですが、
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へのリダイレクトは実行されません。
2012/09/22 08:01:40どのリライトルールに対して「RewriteCond %{REQUEST_URI} !^/b.html」を指定したのでしょうか?
良かったら動作環境・状態をもう少し詳しく教えてください。
【※追記して再投稿※】
ブラウザを再起動するか、キャッシュを削除しませんでしたか?
「RewriteCond %{REQUEST_URI} !^b.html」がなくても動作すると思いますので、この行を削除するか無効にし、ブラウザのキャッシュを削除してから再度動作を確認してみてください。
※また少しだけ訂正しました。ほんの少しの違いですが・・・
何回もメールが届いていたらすみません。