No.2
- 回答日時:
記述自体には問題はなさそうなので、サーバーに転送する際の「転送モード」を確認して下さい。
ファイルの拡張子などで「テキスト/バイナリ」を自動切換しているftpクライアントソフトは、.htaccessを「テキストではない、バイナリファイル」と認識して、バイナリ転送する場合があります。
バイナリ転送された場合、改行コードの問題で「記述したすべての行がWEBサーバーに無視」されます。
ホスト側にあるファイルとサーバー側にあるファイルが「同じ大きさ」の場合、確実にバイナリ転送されてしまっているので、.htaccessは機能しません。
早速有り難うございます。
>記述自体には問題はなさそうなので
そうかと思います。
>ホスト側にあるファイルとサーバー側にあるファイルが「同じ大きさ」の場合、
逆に、じゃないといけないですよね。
テキストでアップされなければならないから、同じでないと。
実際には同じになっていますし、自分のサイトをdenyに入れてやってみましたが、
チャンと拒否されます。
何処がおかしいでしょうか。
不思議です。
No.3
- 回答日時:
> テキストでアップされなければならないから、同じでないと。
> 実際には同じになっていますし、自分のサイトをdenyに入れてやってみましたが、
> チャンと拒否されます。
私の利用しているレンタルサーバでも、.htaccess の転送は「ASCII モード」で行うように書かれています。「ASCII モード」でローカルとサーバの OS が異なる場合は、ファイルサイズは同じにはなりません。自分のサイトでうまく行くのは、同じ環境のためだと思います。
deny from .microad.jp(CR)(LF)
Unix 系の OS で上記の行を受け取ると、(CR) を削除して (LF) のみの改行コードで保存します。そうでないと、(CR) までが URL として解釈されてしまいます。サーバの環境を調査して、ファイルサイズの比較をしてみてはどうでしょうか。
早速有り難うございました。
皆様からの教えでよく分かりました。
ご指摘のようになっておりました。
これまで拒否出来ていたと思っていたのは、
訪問されていないだけだったのかなと思います。
asciiでアップし直し、行数分だけ小さくなっていることを確認しました。
お世話になりました。
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のまま)途中に入れましたが、
相変わらず拒否されました。
これは、なぜでしょうか。
本件は納得、終了ですが、後学のため宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ASPから既存のexcelブックを開...
-
ラジオボタンのグループ化
-
CGIファイル内のCSSが更新でき...
-
ロリポップのパーミッション
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
TwitterAPIを使用せずに自動ツ...
-
AS/400 QUERYの集計結果について
-
SSI(<!--#exec cmd="./XXXpl")...
-
ASP(IIS?)のエラーについて
-
HTML文書の中で環境変数を使う...
-
VBAを使用して、外部サーバのフ...
-
LAN内に接続されているPCをリ...
-
実行および文字列の受け渡し
-
VBScriptで、ファイルから任意...
-
リビングのソファー(皮)のキ...
-
URLに~/cgi-bin/~を隠す方法
-
jcode.pl のパーミッション
-
CGIがうまくアップできない(50...
-
http://tydsu.com/oeder と後ろ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ASPから既存のexcelブックを開...
-
ラジオボタンのグループ化
-
Perlでファイルをアップロード...
-
MT/カスタムフィールドでのPDF...
-
プロクシーを経由してwebbrowse...
-
ユーザの所属するグループを取...
-
tableのthに斜めの線をCSSで入...
-
CGIの設置方法を教えてくだ...
-
WEBデザイナーの方にお聞きした...
-
ホームページのレイアウトが崩...
-
サーバー間でファイルコピーしたい
-
MP Form Mail CGI で 500サーバ...
-
ファイルアップロードでセキュ...
-
LAN上の他サーバにあるDBを参...
-
掲示板のスレッドが消えた!?
-
拡張子.vmのWeb文書ファイルをI...
-
index.htmlからCGIへリンクを貼...
-
ホームページを製作しています...
-
イントラネットで機能する検索...
-
プログラミングの問題について...
おすすめ情報