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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ホームページビルダー12 公開...
-
ASPから既存のexcelブックを開...
-
ラジオボタンのグループ化
-
Perlでファイルをアップロード...
-
EXCELファイルに誰がアクセスし...
-
特定のCGIだけ、作動するかわり...
-
《エクセルVBA》「他の人が該当...
-
IISでエラー、Apachでは動くの...
-
VB6でレジストリファイルをイン...
-
VBScriptで、ファイルから任意...
-
CGIの起動が遅い
-
URLに~/cgi-bin/~を隠す方法
-
KENTさんの掲示板をトップペー...
-
VBAでサーバーにアクセスするに...
-
NANAの革ジャン!!!
-
CGIのログの閲覧について
-
CGIのプログラムについて
-
.htaccessを2つ以上設置した場合
-
CGI経由で起動したプロセスが停...
-
SSIでリダイレクトできないでし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ラジオボタンのグループ化
-
ASPから既存のexcelブックを開...
-
MT/カスタムフィールドでのPDF...
-
ユーザの所属するグループを取...
-
MP Form Mail CGI で 500サーバ...
-
Web上からftpを操作
-
DreamweaverCS6のサイトデータ移行
-
テキストカウンタ (SSI)
-
パーミッションについて詳しく...
-
ロリポップのパーミッション
-
サーバーのエクセルファイルを...
-
CGIファイル内のCSSが更新でき...
-
ホームページビルダー12 公開...
-
JAVAアプレットの仕組みについて
-
CGIを含んだHPデータのサーバー...
-
ホームページのレイアウトが崩...
-
Dreamweaver/リモートフォルダ...
-
WEBデザイナーの方にお聞きした...
-
oracle接続(別サーバー)
-
マイ ネットワーク\\サーバーA(...
おすすめ情報