【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?

以下のような.htaccessを入れていますが、
この度、adf.send.microad.jpに来られてしまいました。
設定に誤りがありますか。
ご指摘ください。
宜しくお願いします。


order allow,deny
allow from all
deny from .microad.jp
deny from .amazonaws.com

A 回答 (4件)

そもそも.htaccessを使える設定になっているのでしょうか。

    • good
    • 0

記述自体には問題はなさそうなので、サーバーに転送する際の「転送モード」を確認して下さい。



ファイルの拡張子などで「テキスト/バイナリ」を自動切換しているftpクライアントソフトは、.htaccessを「テキストではない、バイナリファイル」と認識して、バイナリ転送する場合があります。

バイナリ転送された場合、改行コードの問題で「記述したすべての行がWEBサーバーに無視」されます。

ホスト側にあるファイルとサーバー側にあるファイルが「同じ大きさ」の場合、確実にバイナリ転送されてしまっているので、.htaccessは機能しません。
    • good
    • 0
この回答へのお礼

早速有り難うございます。

>記述自体には問題はなさそうなので
 そうかと思います。

>ホスト側にあるファイルとサーバー側にあるファイルが「同じ大きさ」の場合、
 逆に、じゃないといけないですよね。
 テキストでアップされなければならないから、同じでないと。
 実際には同じになっていますし、自分のサイトをdenyに入れてやってみましたが、
 チャンと拒否されます。

 何処がおかしいでしょうか。
 不思議です。

お礼日時:2014/03/05 17:17

> テキストでアップされなければならないから、同じでないと。


> 実際には同じになっていますし、自分のサイトをdenyに入れてやってみましたが、
> チャンと拒否されます。

私の利用しているレンタルサーバでも、.htaccess の転送は「ASCII モード」で行うように書かれています。「ASCII モード」でローカルとサーバの OS が異なる場合は、ファイルサイズは同じにはなりません。自分のサイトでうまく行くのは、同じ環境のためだと思います。

deny from .microad.jp(CR)(LF)

Unix 系の OS で上記の行を受け取ると、(CR) を削除して (LF) のみの改行コードで保存します。そうでないと、(CR) までが URL として解釈されてしまいます。サーバの環境を調査して、ファイルサイズの比較をしてみてはどうでしょうか。
    • good
    • 0
この回答へのお礼

早速有り難うございました。
皆様からの教えでよく分かりました。
ご指摘のようになっておりました。
これまで拒否出来ていたと思っていたのは、
訪問されていないだけだったのかなと思います。
asciiでアップし直し、行数分だけ小さくなっていることを確認しました。
お世話になりました。

お礼日時:2014/03/06 13:46

>>ホスト側にあるファイルとサーバー側にあるファイルが「同じ大きさ」の場合、


> 逆に、じゃないといけないですよね。

いいえ。「同じサイズだとNG」です。

.htaccessファイルは「テキストモードで転送」しなければなりません。

何故なら「転送元の端末と、サーバーで、改行コードが同じだと言う保証が、どこにもない」からです。

テキストモードで転送した場合、改行は「サーバー側が改行として解釈する文字コード」に変換されてサーバーに置かれます。

通常、サーバーが「LINUX系」で、端末側が「Windows系」の場合、テキストモードで転送すると、ファイルの行数と同じだけ、ファイルが小さくなります。

これは「Windows系の改行が2バイト、LINUX系の改行が1バイト」だからです。

例えば「5行のファイル」は、5個の改行が「2バイト×5個」から「1バイト×5個」になるので、5バイト短いファイルになってアップロードされます。

> テキストでアップされなければならないから、同じでないと。

逆です。

テキストでアップされた場合は、端末とサーバーでサイズが変わります。

同じサイズで送られているなら、バイナリで転送されてしまっています。

> 実際には同じになっていますし、自分のサイトをdenyに入れてやってみましたが、
> チャンと拒否されます。

その「自分のサイトの指定」は「一番最後の行」に書いてませんか?

以下のようなファイルをバイナリ転送した場合を考えます。

order allow,deny<CR><LF>
allow from all<CR><LF>
deny from .microad.jp<CR><LF>
deny from .amazonaws.com<CR><LF>
deny from 自分のサイト[EOF]   ←この「最後の行」の末尾は、改行していません。

このような「改行が<CR><LF>になっているテキストファイル」は「Windowsのメモ帖」でテキストファイルを保存した時に作成されます。

HTTPサーバーは

order allow,deny<CR>

を評価します。末尾に「<CR>」が付いているため

order allow

と解釈し「,deny<CR>」をエラーで無視します。

次に

allow from all<CR>

を評価します。末尾に「<CR>」が付いているため「all<CR>というサイトをアクセス許可」します。「すべてのサイトをアクセス許可」にはなりません。

次に

deny from .microad.jp<CR>
deny from .amazonaws.com<CR>

をそれぞれ評価します。末尾に「<CR>」が付いているため「.microad.jp<CR>」と「.amazonaws.com<CR>」がアクセス拒否されます。

この時「.microad.jp」と「.amazonaws.com」は、一致しないため、アクセス拒否されません。

次に

deny from 自分のサイト

を評価します。一番最後の行で、末尾で「ファイルが終わった」ため、末尾に余計な「<CR>」は付着していません。正しく「自分のサイト」がアクセス拒否されます。

どうです?「間違ってバイナリで転送しちゃったけど、自分のサイトだけはちゃんとアクセス拒否された」でしょう?

そういう訳なので、ちゃんと「テキストモードで転送」して「サーバー側のファイルのファイルサイズが数バイト小さくなったのを確認」しましょう。

ちゃんと「テキストモード」で転送すれば、サーバーに

order allow,deny<LF>
allow from all<LF>
deny from .microad.jp<LF>
deny from .amazonaws.com<LF>
deny from 自分のサイト[EOF]

と言うファイルが送られ、それぞれの行が、ちゃんと

order allow,deny
allow from all
deny from .microad.jp
deny from .amazonaws.com
deny from 自分のサイト

と評価されます。

なお「転送元の端末も、サーバーも、どちらもLINUX系」であったり「転送元の端末も、サーバーも、どちらもWindows系」であった場合、どちらも「改行コードは同一」ですから、テキスト転送でもバイナリ転送でもサイズは変わりません。

但し、テキストファイルで漢字を使った場合は、テキストとバイナリで「大違い」ですから、漢字混じりのテキストは必ずテキストモードで転送しなければなりません。
    • good
    • 0
この回答へのお礼

何回もお手間をお掛けしました。
よく分かりました。

また、asciiモードで転送して行数分だけ小さくなったことも確認しました。
サラに、自分の作った.htaccessについて改行コードを確認したところ、
crlfであることも確認しました。
これまで拒否出来ていたと思っていたのは、訪問されていなかっただけかと思っています。

今回教え頂いたことはよく分かったので、今後は大丈夫かなと思います。



ただ、以下について教えていただければなお幸いです。


>その「自分のサイトの指定」は「一番最後の行」に書いてませんか?
 これですが、初めはyesでした。(最後に書いていました。)
 ただ、この行も
>deny from 自分のサイト[EOF]   ←この「最後の行」の末尾は、改行していません。
 ではなく、他の行と同じように最後はcrlfでした。(改行していました。)
 また、そっくりコピーして(改行はcrlfのまま)途中に入れましたが、
 相変わらず拒否されました。
 これは、なぜでしょうか。

本件は納得、終了ですが、後学のため宜しくお願いいたします。

お礼日時:2014/03/06 13:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!