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

「 .htaccess 」での「 RewriteRule 」の質問です

、 imgboard.cgi にアクセスがあったとき・・・
・ xxmydomain( と言うか xrea.com )内からであれば置き換えしない
・ それ以外であれば、http://xxdomain.com/index.htm に置き換える
という目的で以下の記述をしました

RewriteEngine On
RewriteCond %{HTTP_REFERER} !http://xxdomain.com/|imgboard.cgi
RewriteRule imgboard.cgi http://xxdomain.com/index.htm [R,L]

これで、とりあえず最初のアクセスは希望通りになりました
しかし、投稿や投稿削除などをすると、それらは反映されるけど、
掲示板に戻らず http://xxdomain.com/index.htm に置き換えされ
てしまいます


●質問者: watson
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:.htaccess CGI HTTP_REFERER ON XREA
○ 状態 :終了
└ 回答数 : 7/7件

▽最新の回答へ

[1]補足します watson

ひょっとして、この記述が問題なのかなと思いますが・・・

RewriteCond %{HTTP_REFERER} !http://xxdomain.com/|imgboard.cgi

ちなみに、この記述は・・・

リファラが xxdomain.com または imgboard.cgi のどちらでもない場合は、

という趣旨でした

記述が悪いのか?それとも掲示板からではリファラに imgboard.cgi が含

まれないのか?などと思ったりしています

なお、ドメイン部分を実アドレスである xxxxx.sxx.xrea.com に変更して

もダメでした

また、自分はリファラを知る手段を知りません

加えて言うと、過去に少し違う質問をしましたが、得られた回答では上手

くいきませんでした

http://q.hatena.ne.jp/1156295038


[2]GET でパラメータが付加されているから? STRing

RewriteEngine On

RewriteCond %{HTTP_REFERER} !http://xxdomain.com/|imgboard.cgi.*$

RewriteRule imgboard.cgi http://xxdomain.com/index.htm [R,L]

このように .* -> 任意の文字の連続、 $ -> 行末の指定をしてはどうでしょう?

どのような cgi なのか判りませんが、検索モードなどでは .cgi?mode=delete などとなっていることがあります。

それによって条件を満たさなくなっているのではないでしょうか?

# Rewrite は使ったことがないので初期値が後方一致でしたら外れですね。


[3]>2 「cgi.*$」ではダメでした watson

でも、この辺りの記述の問題ですよね


[4]>3 ちょっと書き漏らし STRing

すいません、手元で実験してみたら、


RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://xxdomain.com/|imgboard.cgi.*$

RewriteRule imgboard.cgi http://xxdomain.com/index.htm [R,L]


このように ^ -> 行頭も指定したら対象に ?hoge とか付けたアドレスでも望む動作をしました。

ちょっと行頭の指定を書き漏らしていました。すいません。

あと、それでも駄目なら何らかのツールでそれぞれの状況で Referer の値がどのようになっているのかを確認してはどうでしょうか?

サーバ側のアクセスログとか、 Firefox では拡張があります。私はそれ以外のことも併せて Proxomitron で見ています。

Live HTTP headers - Mozilla Firefox まとめサイト

http://firefox.geckodev.org/index.php?cmd=read&page=Live%20H...


[5]>4 行頭/行末の記号は、付けても付けなくても結果は同じでした watson

ところで、Live HTTP headersって有料?

サイトを見てみたけど、良く解りませんでした


[6]追試してみました tezcello

以下の条件で追試してみました。

質問者と全く同じ環境を用意は出来ませんので、適宜読み替えて下さい。

1156589661/
 +- A.htm
 +- php/
 +- A.php

というディレクトリ構成で、

A.htm 内で
 <a href="php/A.php">A.php</a>

A.php からの出力で
 <a href="A.php?A=1">to myself</a>

.htaccess で

RewriteEngine On
RewriteCond %{HTTP_REFERER} !http://test
RewriteRule A.php http://test/1156589661/A.htm [R]

と記述しました。

この時、A.htm のリンクも A.php から自分自身へのリンクも A.php をチャンと表示しています。

別なページを表示している状態から、A.php を含むアドレスへ行こうとすると A.htm が表示されます。

(http://test/1156589661/A.php http://test/1156589661/php/A.php どちらでも)

こういった動作がご希望のものだと思うので、問題無いかと思うのですが、いかがでしょうか。


追試の途中で、A.php 内での記述を http://test/1156589661/A.php

とした時に、ページが見つからないと表示されて、再読込をすると A.htm が表示される事がありましたが、このような状態ではありませんか?


RewiteCond で二つの条件を|(パイプ)で繋いでいますが、条件の結合はフラグで行うみたいですが、どうでしょうか?

また、imgboard.cgi は xxdomain.com の配下にあるはずなので、今回の場合は imgboard.cgi に関する記述は不要と思いますが?


[7]>5 Live HTTP headersインストール成功 & ホスト名で解決!! watson

ありがとうございました

ホスト名が、たぶん常にxxmydomain.comであるみたいなので、以下の記述に変更したらOKでした

RewriteEngine On

RewriteCond %{HTTP_HOST} !^xxdomain.com

RewriteRule imgboard.cgi http://xxdomain.com/index.htm [R,L]

関連質問


●質問をもっと探す●



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