niftyのサーバーでファイルの直リンクを防止する方法です。方法の紹介というより自分のための備忘録ということで記しておきます。@nifty利用者で同様にCGI設置にハマってしまった人の参考になれば幸いです。
とあるファイルを公開・配布しようと思った(詳細は近日発表!)ってのがそもそもの事の発端なんですが、どうせならちゃんとログ解析してダウンロード数を把握したり直リンク対策をしたりできるようにCGIを設置してみようと思ったんですね(そもそもそんなに数多くDLされたり直リンされたりするようなご大層なファイルなのかという突っ込みはさておいて)。
そこで色々とフリーCGIを探しまくってまず試してみたのが Web Libertyさん(因みに間違えやすいですがライブラリではなくリバティです)の『Web Analyze Ver 3.11』でした。ダウンロード数のカウント以外にも数々の機能があり非常に惹かれてしまいました。ただ、直リンク対策の機能はないのですが一目惚れしたこのCGIを設置しようと躍起になっている時には直リンクがどうこうとかいうことは頭からすっかり抜けきっておりました。
ところが、ちゃんと設置したはずなのにどうしてもエラーが出てしまうんですねぇ。しかもniftyの場合エラー内容をアバウトにしか表示してくれないので原因を追求しにくいんです…。そこでとりあえずもう少し簡単に設置出来るものをということで試してみたのが kz soft さんの『Kz ダウンロードカウンター』。こちらは非常に簡単に設置でき、きちんと動作しました。…となると私のCGI設置法(アスキーモードで転送だのパーミッション変更だの)は基本的に間違っていないということです。『Web Analyze』が設置できない理由は何かもっと別のところにあって、単純なマニュアル通りの設置ではダメなんですねきっと。カウンタが設置出来たんだからそれでいいやとも思えたのですが、機能がどうこうより『Web Analyze』が設置できないというその事実自体が悔しいので(苦笑)、更に突っ込んで調べてみました。この段階で完全に手段が目的に入れ替わっています。
で、サポート掲示板を覗いてみたところ、「niftyのサーバーは、perlのバージョンは5だが標準的なモジュールは使えない」ために「(サーバーとして)オススメできない」ということがわかりました(涙)。「標準的なモジュールが使えない」ということ自体はniftyの説明文に目を通していたので知ってはいましたが、その文章の意味するところはさっぱりわからなかったので これが原因だと思っていませんでした。CGI制作者から「niftyでの設置は難」と言われてしまったら私のオツムでは諦めるしかありません。
そこで他のCGIを探しているうちに「そうだ、そもそもCGIを設置したかったのは直リンクよけってのをやってみたかったからだ!」とようやく思い出しました。直リンク対策として見つけたのが MyTools.NET さんの『T-FileSafe Ver.1.00』というCGI。ところがこれもniftyでは色々と制約があり一筋縄では行きません。
さて、長い前置きでしたが(相変わらずホントになげーよ!)いよいよ本題、「アット・ホームページ(nifty)で『T-FileSafe Ver.1.00』を使う方法」です。説明書のインストール方法と合わせてご覧下さい。
まず「一般のHTMLファイルを置くディレクトリの外に置け」との指示がある「制限するファイルを置くディレクトリ」ですが、niftyの場合これは無理(のはず)なので普通に「homepage」内に置く事になります。この場合の注意点も説明書に詳しく書かれています。
ここからが私の失敗例。はじめにtfsafe.cgiやtflog.cgiに記述するパスですが、niftyの説明によると「CGIからHTMLファイルにリンクする場合、httpから記述すること(相対パス、絶対パス不可)と書かれています。なのでこの部分もhttpから書かないとまずいのかと思い、httpから記述しました。結論からいうとこの部分は絶対パスで大丈夫です。
次。データファイルを置く場所なんですが、データファイルというのはつまりtxtファイルです。説明で例として指示されているのは「access.txt」「errors.txt」ですね。「niftyの場合cgi-binディレクトリに入れたHTMLファイルは外部から読めない」ということは調べているうちによく目にするんですが、なんとtxtも読めない(#)んですね。なのでこれらもhomepageディレクトリ内に置いてやる必要があるんですが当初私はここに気づいていませんでした。
#正確にはわかりませんがtxtファイルの置き場所を変えたら上手くいったので多分そうだと思います。
で、この間違えた状態で動作確認すると、「11. ブラウザからtfsafe.cgiにアクセスしてみる。」と「13. ブラウザからtflog.cgiにアクセスしてみる。」はクリアできます。12番がダメなんですね。また、これは私だけの問題でしたが(後述)tflog.cgiにアクセスした時の画面で「access.txt」は(Status: Good)になっているのに「errors.txt」の方は違っていました(なんと書かれていたか忘れてしまいました…)。
しかし、少なくともCGIは動作しています! 『Web Analyze』と違って「あとちょっとで出来そう」という気がします。そこでサポート掲示板を調べたりしてわかったことは、「(niftyの場合)homepage内に置いたファイルへのパスの書き方は /homepage/XXX/XXX でよい」ということでした(XXXはディレクトリ名)。また「データファイルはhomepage内に置かねばならない」ということにも気づきましたので、この対策もしてみました。以下まとめますと、
・説明書4番において$basedirを記述する部分には「/homepage/(データファイルを置いた場所)」と記す。$rootdirも同様。
・説明書5番も同様。ただし$baseurlについては「URL」とあるのでhttpから記述(←私はそうした、ということです。絶対パスでもいいのかもしれません)。
あとは説明書通りにやれば動作します。…んが、私の場合何故か管理画面(tflog.cgi)から「errors.txt」を見る(開く)ことが出来ませんでした。パーミッションはちゃんとしているし、そもそも同じところに置いてある「access.txt」はちゃんと見れる。別にエラーログが見れなくてもアクセスログさえわかればいいか…と思うもののやはり気になる…「access.txt」が見れている以上、何かどこかちょっとしたミスのはず…悩む事数十分。
やっと分かった時には拍子抜けしてしまいました。アップロードしたファイルがなんと「errors.txt」ではなく「error.txt」になっておりました(sを付け忘れていた)。直してやったら無事に動作するようになりました。めでたしめでたし。
なお余談ですがMacユーザーの場合は『RBrowser』というFTPソフトを使うと、数値の入力だけでパーミッション変更が行えるので(数字の意味がわかっていない私には『Cyberduck』に比べると)非常に楽です。
<追記>
断言できませんが、どうもあまりにも長いディレクトリ名にするとcgiに負荷がかかるようです。niftyのサーバー等では直リンクを防ぐために長くてデタラメの文字列のディレクトリを作る必要がありますが、やたらくそ長い名前にしない方がいいようです。
済みません。あまり関係無いみたいです…。直した直後は100発100中で落とせるようになりましたがまたサーバーエラーが出るようになっちゃいました。
とあるファイルを公開・配布しようと思った(詳細は近日発表!)ってのがそもそもの事の発端なんですが、どうせならちゃんとログ解析してダウンロード数を把握したり直リンク対策をしたりできるようにCGIを設置してみようと思ったんですね(そもそもそんなに数多くDLされたり直リンされたりするようなご大層なファイルなのかという突っ込みはさておいて)。
そこで色々とフリーCGIを探しまくってまず試してみたのが Web Libertyさん(因みに間違えやすいですがライブラリではなくリバティです)の『Web Analyze Ver 3.11』でした。ダウンロード数のカウント以外にも数々の機能があり非常に惹かれてしまいました。ただ、直リンク対策の機能はないのですが一目惚れしたこのCGIを設置しようと躍起になっている時には直リンクがどうこうとかいうことは頭からすっかり抜けきっておりました。
ところが、ちゃんと設置したはずなのにどうしてもエラーが出てしまうんですねぇ。しかもniftyの場合エラー内容をアバウトにしか表示してくれないので原因を追求しにくいんです…。そこでとりあえずもう少し簡単に設置出来るものをということで試してみたのが kz soft さんの『Kz ダウンロードカウンター』。こちらは非常に簡単に設置でき、きちんと動作しました。…となると私のCGI設置法(アスキーモードで転送だのパーミッション変更だの)は基本的に間違っていないということです。『Web Analyze』が設置できない理由は何かもっと別のところにあって、単純なマニュアル通りの設置ではダメなんですねきっと。カウンタが設置出来たんだからそれでいいやとも思えたのですが、機能がどうこうより『Web Analyze』が設置できないというその事実自体が悔しいので(苦笑)、更に突っ込んで調べてみました。この段階で完全に手段が目的に入れ替わっています。
で、サポート掲示板を覗いてみたところ、「niftyのサーバーは、perlのバージョンは5だが標準的なモジュールは使えない」ために「(サーバーとして)オススメできない」ということがわかりました(涙)。「標準的なモジュールが使えない」ということ自体はniftyの説明文に目を通していたので知ってはいましたが、その文章の意味するところはさっぱりわからなかったので これが原因だと思っていませんでした。CGI制作者から「niftyでの設置は難」と言われてしまったら私のオツムでは諦めるしかありません。
そこで他のCGIを探しているうちに「そうだ、そもそもCGIを設置したかったのは直リンクよけってのをやってみたかったからだ!」とようやく思い出しました。直リンク対策として見つけたのが MyTools.NET さんの『T-FileSafe Ver.1.00』というCGI。ところがこれもniftyでは色々と制約があり一筋縄では行きません。
さて、長い前置きでしたが(相変わらずホントになげーよ!)いよいよ本題、「アット・ホームページ(nifty)で『T-FileSafe Ver.1.00』を使う方法」です。説明書のインストール方法と合わせてご覧下さい。
まず「一般のHTMLファイルを置くディレクトリの外に置け」との指示がある「制限するファイルを置くディレクトリ」ですが、niftyの場合これは無理(のはず)なので普通に「homepage」内に置く事になります。この場合の注意点も説明書に詳しく書かれています。
ここからが私の失敗例。はじめにtfsafe.cgiやtflog.cgiに記述するパスですが、niftyの説明によると「CGIからHTMLファイルにリンクする場合、httpから記述すること(相対パス、絶対パス不可)と書かれています。なのでこの部分もhttpから書かないとまずいのかと思い、httpから記述しました。結論からいうとこの部分は絶対パスで大丈夫です。
次。データファイルを置く場所なんですが、データファイルというのはつまりtxtファイルです。説明で例として指示されているのは「access.txt」「errors.txt」ですね。「niftyの場合cgi-binディレクトリに入れたHTMLファイルは外部から読めない」ということは調べているうちによく目にするんですが、なんとtxtも読めない(#)んですね。なのでこれらもhomepageディレクトリ内に置いてやる必要があるんですが当初私はここに気づいていませんでした。
#正確にはわかりませんがtxtファイルの置き場所を変えたら上手くいったので多分そうだと思います。
で、この間違えた状態で動作確認すると、「11. ブラウザからtfsafe.cgiにアクセスしてみる。」と「13. ブラウザからtflog.cgiにアクセスしてみる。」はクリアできます。12番がダメなんですね。また、これは私だけの問題でしたが(後述)tflog.cgiにアクセスした時の画面で「access.txt」は(Status: Good)になっているのに「errors.txt」の方は違っていました(なんと書かれていたか忘れてしまいました…)。
しかし、少なくともCGIは動作しています! 『Web Analyze』と違って「あとちょっとで出来そう」という気がします。そこでサポート掲示板を調べたりしてわかったことは、「(niftyの場合)homepage内に置いたファイルへのパスの書き方は /homepage/XXX/XXX でよい」ということでした(XXXはディレクトリ名)。また「データファイルはhomepage内に置かねばならない」ということにも気づきましたので、この対策もしてみました。以下まとめますと、
・説明書4番において$basedirを記述する部分には「/homepage/(データファイルを置いた場所)」と記す。$rootdirも同様。
・説明書5番も同様。ただし$baseurlについては「URL」とあるのでhttpから記述(←私はそうした、ということです。絶対パスでもいいのかもしれません)。
あとは説明書通りにやれば動作します。…んが、私の場合何故か管理画面(tflog.cgi)から「errors.txt」を見る(開く)ことが出来ませんでした。パーミッションはちゃんとしているし、そもそも同じところに置いてある「access.txt」はちゃんと見れる。別にエラーログが見れなくてもアクセスログさえわかればいいか…と思うもののやはり気になる…「access.txt」が見れている以上、何かどこかちょっとしたミスのはず…悩む事数十分。
やっと分かった時には拍子抜けしてしまいました。アップロードしたファイルがなんと「errors.txt」ではなく「error.txt」になっておりました(sを付け忘れていた)。直してやったら無事に動作するようになりました。めでたしめでたし。
なお余談ですがMacユーザーの場合は『RBrowser』というFTPソフトを使うと、数値の入力だけでパーミッション変更が行えるので(数字の意味がわかっていない私には『Cyberduck』に比べると)非常に楽です。
<追記>
済みません。あまり関係無いみたいです…。直した直後は100発100中で落とせるようになりましたがまたサーバーエラーが出るようになっちゃいました。
※コメント投稿者のブログIDはブログ作成者のみに通知されます