• ベストアンサー

htaccess Actionの記述、動作について

.htaccessのActionを使って特定のファイルをダウンロードしたらログを取りたいと思っています。 そこでActionを使おうと動作を試しているのですが、思ったように動作していません。 .htaccessの内容(下記以外他の記述はありません) Action image/jpeg /test/accesslog.cgi .htaccessの置き場所は http://ドメイン/test/.htaccess accesslog.cgiの内容 #!/usr/local/bin/php-cgi-5.2.5 <?php $fp = fopen("log.txt","a"); fputs($fp,date("Y/m/d H:i:s") . "\n"); fclose($fp); ?> http://ドメイン/test/test.jpg にアクセスするとブラウザにはtest.jpgが表示され、log.txtにアクセス時間が保存されるものだと思っています。 しかし、ブラウザには?と半角の文字が表示されます。 htaccessを無効にした場合の画像へのアクセス、CGI単独での動作は確認しており、htaccessを間違えているかサーバの設定が影響しているのだろうと判断しています。 また、関係あるかわかりませんが、Actionの内容を下記のように間違えたパスにすると Action image/jpeg /_test/accesslog.cgi test.jpgにアクセスしたブラウザには以下のようにエラーが出ます。 The requested URL /_test/accesslog.cgi/test/test.jpg was not found on this server. /_test/accesslog.cgi was not found on this server.ならわかるのですが、 その後に/test/test.jpgとアクセスしているファイルへのパスが引っ付いています。 何を間違えているのか検討がつかず困っています。 どなたかわかりましたら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

Actionで指定されたスクリプトに、環境変数PATH_INFOとPATH_TRANSLATEDが送られます。つまりaccesslog.cgiは   accesslog.cgi/test/test.jpg と起動されたらログを記録した後で、pathinfoのtest/test.jpgを元にtest.jpgの内容をブラウザに返すまでが仕事になります。test.jpgを読み込んでブラウザに送ってやらなければいけません(当然headerで適切なレスポンスヘッダを付けて)。

dede_nd
質問者

補足

ありがとうございます。 CGIが別スレッドのようなイメージで裏側で動いてくれるものだと思っていました。前進できました。

その他の回答 (2)

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.3

それよりも 画像である事が判っているなら http://httpd.apache.org/docs/2.0/mod/mod_log_config.html#customlog http://httpd.apache.org/docs/2.0/env.html 下の方の「画像へのリクエストをアクセスログに記録しない」 このあたりを参考に標準で持っているログ記録を使って収集した方が早いし安全だし負荷は減るし取りたい情報をかなり増やせると思うけどどうかな

dede_nd
質問者

補足

ありがとうございます。(No.2にありがとうございますと書き忘れました。失礼しました。) 説明不足ですいませんが、htaccessの挙動を確認したく、画像で試していただけなのです。実際はPDFなどのファイルをマウスの右クリックでダウンロードしたときに、自動でDBにログを残すのが目的なのです。 ですので、カスタムログのはまた別の用途の時に参考にさせて頂きます。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.2

No1も書いてるけど http://httpd.apache.org/docs/2.0/mod/mod_actions.html#action 抜粋 ------------------------- 例では、MIME コンテントタイプが image/gif のファイルへのリクエストは、そのファイルの代わりに指定されたスクリプト /cgi-bin/images.cgi が呼ばれます。 ------------------------- 「代わりに」って事らしいよ。 だからそのphpで何かしら文字を出力すると 言ってる事が判るようになるんじゃないかな。

dede_nd
質問者

補足

「そのファイルの代わりに」なんですね。正直残念です。

関連するQ&A

  • .htaccessでのdenyを記録する方法は?

    不正なアクセスに対して、.htaccessでIPアドレスでdenyするようにしていますが、denyする対象を追加していくときりがないので、設定後一定期間アクセスがないものは外すようにしています。 エラーログを見られるサーバーはエラーログで判断していますが、ログを見られないサーバー(レンタルサーバー)もあるので、.htaccessでのdenyを独自に記録したいと思います。 403エラーのエラエードキュメントとしてログを記録するcgiを指定すると、このcgiにもアクセスできないので記録できません。 特定のIPアドレスからのアクセスに対して、これを記録するcgiへリダイレクトするというようなことはできないでしょうか?

  • .htaccessについて教えて下さい。

    .htaccessについて教えて下さい。 [.htaccess] AuthUserFile /home/ユーザー名/public/www/aa_cgi/.htpasswd AuthGroupFile /dev/null AuthName ByPassword AuthType Basic require valid-user ハッスルサーバーを使っています。 上記でキチントaa_cgiのフォルダにアクセス制限がかかります。 動作は問題ありません。 しかし、アクセス制限していない htmlファイル(top.html)を開くと パスワード認証の画面が表示されるのです。 何故こんな事が起こるのか、どなたかおおしえ下さい。よろしくお願い申し上げます。 |-aa_cgi(制限したいディレクトリ) | |-.htaccess | |-.htpasswd | |-top.html |-link.html |-index.html |-pic.html aa_cgiのフォルダと同じ階層に top.html link.html index.html pic.html があります。.htaccessはaa_cgiのフォルダの中にあります。 なのになぜか、top.htmlだけパスワードを聞かれます。他のlink index pic ファイルは開いてもパスワードを聞かれません。

    • ベストアンサー
    • CGI
  • .htaccessでのディレクトリ観覧制御は完璧!?

    メールフォームで受け取った大切なお客さんの情報をログとして公開ディレクトリに置かなければならないことになり.htaccessでディレクトリすべての観覧を禁止しようと考えています。 メールフォームは mail.cgi で ログ保存ディレクトリは maillog/ です。 htaccessでブロックするため order deny,allow deny from all allow from www.hogehoge.com/mail.cgi としました。しかし聞いた話によるとhtaccessはブラウザのリファーラをチェックして判断しており悪意のユーザーが改造したブラウザを使用しリファーラを変換しログの観覧を可能にしてしまうのではないかと心配です。 この場合、やはりhtaccessでの完全なるmail.cgiのみのアクセス制御は実現できないのでしょうか? ほかの方法でさらにセキュアな方法があったらぜひ教えてください。

  • cgi-bin内に.htaccess

    現在MacOSXでwebサーバーを構築しているのですが,cgiファイルを置いているcgi-bin内に, .htaccessファイルを置いてアクセス制限を行いたいのですが,これはどのようにしたら良いでしょうか? 現在webページの一部に.htaccessを用いてアクセス制限を行い.そこからcgiにリンクさせているのですが, cgiのアドレスを直で入力するとアクセスできてしまいます. よろしくお願いします.

    • ベストアンサー
    • CGI
  • ,htaccessで、TOPページのSSIなどはアクセス許可

    わかりにくいですね、 えっと、今、レンタルサーバで独自ドメイン取得してあって.htaccessもいじれるわけなんですが、 アクセスログなどのCGIをおいてあるディレクトリに.htaccessを使ってアクセス認証にしてあるんですが、そうするとトップページに貼り付けたaccessログのscriptやSSIも記録取れなくなります。つまりタブンscriptとかもアクセス認証ではじかれてるのかなって。 で、それらの特定のscript(自分のHP内のscriptなどからのアクセス)を許可するにはどうすれば委員でしょうか?

  • 非表示ディレクトリを404エラーにするには

    サーバ内で隠しておきたいディレクトリ(cgiやtestなど)にアクセスがあった際、「404エラー(Not Found)」にしたいのですが、どのように.htaccessを記述すればよろしいでしょうか。 (現在は403エラーになっています) 詳しい方、どうぞよろしくお願い致します。

  • .htaccessを手直ししてください

    以前、CGI経由でjpgファイルを呼び出していたのですが今は全く別のCGIを使っており、ヤフーやGoogleのキャッシュにアクセスされた際に今のCGIへ呼び出しがきます。 そこで、.htaccessを使って.jpgを含むアクセスを全て拒否したいのですが下記ではうまくいきませんでした。 改良していただけないでしょうか? 宜しくお願い致します。 SetEnvIf QUERY_STRING "\.jpg$" no_object Order allow,deny Allow from all deny from env=no_object

  • 掲示板へのアクセスを.htaccessを用いたパスワード制にしたい。

    掲示板のアドレスは「http://www.○○○/bbs/bbs.cgi」です。この「bbs.cgi」にアクセスする全てを.htaccessを使ったパスワード制にしたいのですが、いまいちやり方がわかりません。 サーバーはパスワード制と.htaccessが使えます。 .htaccessへの記述方法と、設置、設定がよくわからないので、詳しく教えていただければうれしいです。 よろしくお願いします。

  • 上層の.htaccessの影響回避

    よろしくお願いいたします。 さくらのサーバー(スタンダードプラン)を使っていて、 .phpを.htmlで動作させるために、いろいろ調べたところ、 さくらの環境下では以下のように.htaccessを設定するのがベストだと判明しました。 [ .htaccess の内容 ] DirectoryIndex index.html index.php Action myphp-script /php.cgi AddHandler myphp-script .html .php [ 前提条件 ] cp /usr/local/php/最新のバージョン番号/bin/php-cgi /home/USERNAME/www/php.cgi のコマンドを処理しておく。 この設定で、htmlの拡張子でも、phpが正しく動作してくれるようになったのですが、 その下層にあるディレクトリで上記の.htaccessの影響を避けたい(キャンセルしたい)とき 下層に設置する.htaccessにどのような記述を行えばよいでしょうか、、 ちなみに、「none」とだけ記入した場合もNGでした。 ※質問カテゴリがふさわしくなければ申し訳ございません。 サーバーの運用(Apacheの設定)などに関する質問です。 ■以下はより詳しい質問理由です。 そもそも影響を回避したい理由は トップが http://google.com/ の場合、 http://google.com/hoge/が下層にあるとします。 さらに、http://hoge.google.com/を開いたとき http://google.com/hoge/に対してリダイレクトするように設定しています。 .htaccessになんの記述もない時は、 http://hoge.google.com/でもhttp://google.com/hoge/でも 同じページが開かれます。 (SEO等の観点からも2つURLを持つのは好ましくないのは承知ですが;) ところが.htaccessに先ほどの設定を行うと 「The requested URL /php.cgi/index.html was not found on this server.」 というエラーメッセージが出てしまいます。 php.cgiを求めているのかと思い、http://google.com/hoge/直下に コピーしたphp.cgiも置いてみましたが、今度は真っ白なページが表示されるのみです。 .htaccessに何の設定もない時にうまくいっていたので、 http://google.com/hoge/ではhttp://google.com/直下の .htaccessに影響をうけないようにしてあげたいのです。 何卒よろしくお願いいたします。

  • .htaccessの設置について

    HPを制作したのですが、ソース内の文字を文字化けさせたくて .htaccessを設置したのですが見れてしまいます。 属性も604にしました。 内容は Options -Indexes DirectoryIndex index.html index.htm index.cgi index.php <Files ~ "\.(htpasswd|htaccess|txt|log|csv|xls|dat)$"> deny from all </Files> です。 これだけではダメなのでしょうか?

    • ベストアンサー
    • HTML

専門家に質問してみよう