- ベストアンサー
.htaccessの設定
以下のような.htaccessを入れていますが、 この度、adf.send.microad.jpに来られてしまいました。 設定に誤りがありますか。 ご指摘ください。 宜しくお願いします。 order allow,deny allow from all deny from .microad.jp deny from .amazonaws.com
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>>ホスト側にあるファイルとサーバー側にあるファイルが「同じ大きさ」の場合、 > 逆に、じゃないといけないですよね。 いいえ。「同じサイズだと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系」であった場合、どちらも「改行コードは同一」ですから、テキスト転送でもバイナリ転送でもサイズは変わりません。 但し、テキストファイルで漢字を使った場合は、テキストとバイナリで「大違い」ですから、漢字混じりのテキストは必ずテキストモードで転送しなければなりません。
その他の回答 (3)
- kumoz
- ベストアンサー率64% (120/185)
> テキストでアップされなければならないから、同じでないと。 > 実際には同じになっていますし、自分のサイトをdenyに入れてやってみましたが、 > チャンと拒否されます。 私の利用しているレンタルサーバでも、.htaccess の転送は「ASCII モード」で行うように書かれています。「ASCII モード」でローカルとサーバの OS が異なる場合は、ファイルサイズは同じにはなりません。自分のサイトでうまく行くのは、同じ環境のためだと思います。 deny from .microad.jp(CR)(LF) Unix 系の OS で上記の行を受け取ると、(CR) を削除して (LF) のみの改行コードで保存します。そうでないと、(CR) までが URL として解釈されてしまいます。サーバの環境を調査して、ファイルサイズの比較をしてみてはどうでしょうか。
お礼
早速有り難うございました。 皆様からの教えでよく分かりました。 ご指摘のようになっておりました。 これまで拒否出来ていたと思っていたのは、 訪問されていないだけだったのかなと思います。 asciiでアップし直し、行数分だけ小さくなっていることを確認しました。 お世話になりました。
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
記述自体には問題はなさそうなので、サーバーに転送する際の「転送モード」を確認して下さい。 ファイルの拡張子などで「テキスト/バイナリ」を自動切換しているftpクライアントソフトは、.htaccessを「テキストではない、バイナリファイル」と認識して、バイナリ転送する場合があります。 バイナリ転送された場合、改行コードの問題で「記述したすべての行がWEBサーバーに無視」されます。 ホスト側にあるファイルとサーバー側にあるファイルが「同じ大きさ」の場合、確実にバイナリ転送されてしまっているので、.htaccessは機能しません。
お礼
早速有り難うございます。 >記述自体には問題はなさそうなので そうかと思います。 >ホスト側にあるファイルとサーバー側にあるファイルが「同じ大きさ」の場合、 逆に、じゃないといけないですよね。 テキストでアップされなければならないから、同じでないと。 実際には同じになっていますし、自分のサイトをdenyに入れてやってみましたが、 チャンと拒否されます。 何処がおかしいでしょうか。 不思議です。
- lowrider_2005
- ベストアンサー率40% (1520/3748)
そもそも.htaccessを使える設定になっているのでしょうか。
お礼
何回もお手間をお掛けしました。 よく分かりました。 また、asciiモードで転送して行数分だけ小さくなったことも確認しました。 サラに、自分の作った.htaccessについて改行コードを確認したところ、 crlfであることも確認しました。 これまで拒否出来ていたと思っていたのは、訪問されていなかっただけかと思っています。 今回教え頂いたことはよく分かったので、今後は大丈夫かなと思います。 ただ、以下について教えていただければなお幸いです。 >その「自分のサイトの指定」は「一番最後の行」に書いてませんか? これですが、初めはyesでした。(最後に書いていました。) ただ、この行も >deny from 自分のサイト[EOF] ←この「最後の行」の末尾は、改行していません。 ではなく、他の行と同じように最後はcrlfでした。(改行していました。) また、そっくりコピーして(改行はcrlfのまま)途中に入れましたが、 相変わらず拒否されました。 これは、なぜでしょうか。 本件は納得、終了ですが、後学のため宜しくお願いいたします。