
No.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系」であった場合、どちらも「改行コードは同一」ですから、テキスト転送でもバイナリ転送でもサイズは変わりません。
但し、テキストファイルで漢字を使った場合は、テキストとバイナリで「大違い」ですから、漢字混じりのテキストは必ずテキストモードで転送しなければなりません。
何回もお手間をお掛けしました。
よく分かりました。
また、asciiモードで転送して行数分だけ小さくなったことも確認しました。
サラに、自分の作った.htaccessについて改行コードを確認したところ、
crlfであることも確認しました。
これまで拒否出来ていたと思っていたのは、訪問されていなかっただけかと思っています。
今回教え頂いたことはよく分かったので、今後は大丈夫かなと思います。
ただ、以下について教えていただければなお幸いです。
>その「自分のサイトの指定」は「一番最後の行」に書いてませんか?
これですが、初めはyesでした。(最後に書いていました。)
ただ、この行も
>deny from 自分のサイト[EOF] ←この「最後の行」の末尾は、改行していません。
ではなく、他の行と同じように最後はcrlfでした。(改行していました。)
また、そっくりコピーして(改行はcrlfのまま)途中に入れましたが、
相変わらず拒否されました。
これは、なぜでしょうか。
本件は納得、終了ですが、後学のため宜しくお願いいたします。
No.3
- 回答日時:
> テキストでアップされなければならないから、同じでないと。
> 実際には同じになっていますし、自分のサイトをdenyに入れてやってみましたが、
> チャンと拒否されます。
私の利用しているレンタルサーバでも、.htaccess の転送は「ASCII モード」で行うように書かれています。「ASCII モード」でローカルとサーバの OS が異なる場合は、ファイルサイズは同じにはなりません。自分のサイトでうまく行くのは、同じ環境のためだと思います。
deny from .microad.jp(CR)(LF)
Unix 系の OS で上記の行を受け取ると、(CR) を削除して (LF) のみの改行コードで保存します。そうでないと、(CR) までが URL として解釈されてしまいます。サーバの環境を調査して、ファイルサイズの比較をしてみてはどうでしょうか。
早速有り難うございました。
皆様からの教えでよく分かりました。
ご指摘のようになっておりました。
これまで拒否出来ていたと思っていたのは、
訪問されていないだけだったのかなと思います。
asciiでアップし直し、行数分だけ小さくなっていることを確認しました。
お世話になりました。
No.2
- 回答日時:
記述自体には問題はなさそうなので、サーバーに転送する際の「転送モード」を確認して下さい。
ファイルの拡張子などで「テキスト/バイナリ」を自動切換しているftpクライアントソフトは、.htaccessを「テキストではない、バイナリファイル」と認識して、バイナリ転送する場合があります。
バイナリ転送された場合、改行コードの問題で「記述したすべての行がWEBサーバーに無視」されます。
ホスト側にあるファイルとサーバー側にあるファイルが「同じ大きさ」の場合、確実にバイナリ転送されてしまっているので、.htaccessは機能しません。
早速有り難うございます。
>記述自体には問題はなさそうなので
そうかと思います。
>ホスト側にあるファイルとサーバー側にあるファイルが「同じ大きさ」の場合、
逆に、じゃないといけないですよね。
テキストでアップされなければならないから、同じでないと。
実際には同じになっていますし、自分のサイトをdenyに入れてやってみましたが、
チャンと拒否されます。
何処がおかしいでしょうか。
不思議です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームを再送信しますか?
-
ChatGPT
-
チェックボックスでのvalue値の...
-
ChatGPTの性能は昔に比べて上が...
-
apacheでPerl CGIが作動せず、5...
-
エクセルで集計したい。
-
chatGPTみたいに画像生成出来る...
-
iDeCo
-
皆さんはGUCCIはハイブランドだ...
-
cgi-binのエラー?
-
Trees掲示板CGI(CGI-Resque氏...
-
めちゃきれい
-
number 改行が追加できない
-
生成AI画像について
-
3DCG
-
ホームページにメールフォーム...
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
-
ホームページにCGIを設置したの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ラジオボタンのグループ化
-
ASPから既存のexcelブックを開...
-
これってなに!??
-
ユーザの所属するグループを取...
-
WEBデザイナーの方にお聞きした...
-
SFTPなどは使わないホームペー...
-
ホームページビルダー12 公開...
-
ネットワーク上の共有フォルダ...
-
プログラミングの問題について...
-
FFFTPでcgiファイルだけ反映さ...
-
国外レンタルサーバーでのCGIプ...
-
サーバー間でファイルコピーしたい
-
掲示板のスレッドが消えた!?
-
同じサーバー内のフォルダーを...
-
AjaxとDOMの違いを理解できませ...
-
ロリポップのパーミッション
-
ホームページのトップページ上...
-
ビルダーで作成したホームペー...
-
EXCELファイルに誰がアクセスし...
-
KENT WEB(昨日の続きです)
おすすめ情報