Apache:CGIのnphスクリプト
技術ドキュメント目次 -> Apache -> CGIのnphスクリプト本技術ドキュメントは、2002~2004年頃に作成したものが多いです。
内容が古くなっていることもあるかと思いますが、ご了承ください。
【低価格SSL証明書】弊社運営の低価格SSL証明書販売サイト、翌月末払いなど請求書払いも可能。
◆ ポイント
CGI のファイル名を nph- で始まるようにしておくことで、CGI が nphスクリプトとして扱われるようになります。
◆ 解説
Apache を Webサーバーとして使用している環境では、nphスクリプトと呼ばれるCGIを使用することで、
レスポンスコードやレスポンスヘッダについての制御が行えるようになります。
レスポンスコードも制御することができるので、
たとえば、
特定の種類のブラウザからのアクセスに対しては、
404 Not Found のレスポンスを返し
まるでそのURLに対応するファイルが存在していないように振る舞い、
それ以外のブラウザからのアクセスに対しては、
200 OK のレスポンスを返して通常のコンテンツを返す、
といったような制御がCGIのみで行えるようになります。
また、リダイレクト(CGIが Location: のヘッダを返して、別のURLに遷移させる)時の、
レスポンスコード 301(Moved Permanently)と 302(Found)の違いを制御するようなことも可能です。
nphスクリプトを使用するためには、特別な環境を用意する必要はなく、
通常どおりにCGIが使用できる環境を用意すればOKです。
(httpd.conf で、Options の設定や、拡張子が.cgiのファイルの設定を行ってください。)
CGI のファイル名を、
nph- で始まるようにするだけで、
その CGI は nphスクリプトとして扱われます。
以下のサンプルプログラムは、
IE(インターネットエクスプローラ)からのアクセスであれば、
レスポンスコード200で正常なコンテンツを出力し、
それ以外のブラウザからのアクセスであれば、404 Not Found を返すものになりますので、
興味のある方はお手元の環境で確認してみてください。
なお、
ファイル名が nph- で始まらないCGI(nphスクリプトではないCGI)で、
下記のようなことを行おうとすると、
CGIからの予期せぬヘッダの出力と判断されて、
Internal Server Error になってしまいますのでご注意ください。
#!/usr/pkg/bin/perl # Copyright (C) 2006 Slogical Corporation if ($ENV{'HTTP_USER_AGENT'} =~ /IE/) { print <<EOF; HTTP/1.1 200 OK Connection: Keep-Alive Content-type: text/html <HTML> <HEAD> <TITLE>Found !!</TITLE> </HEAD> <BODY> Found !! </BODY> </HTML> EOF } else { print <<EOF; HTTP/1.1 404 Not Found Connection: close Content-Type: text/html <HTML> <HEAD> <TITLE>Not Found</TITLE> </HEAD> <BODY> Not Found </BODY> </HTML> EOF } exit(0); |
■ Apache についての他のドキュメント
- インストール
- htpasswd コマンド
- .htで始まるファイル(ちょっとしたメモ)
- Apache Bench(パフォーマンス測定)
- CGIのnphスクリプト
- ErrorDocument ディレクティブ
- ProxyPass ディレクティブ
- Redirect ディレクティブ
- mod_asisモジュール
- mod_perlモジュール
■ 他のグループのドキュメント
Apache / Linux / FreeBSD / OpenSSL / Perl / HTTPプロトコル / Jakarta Tomcat / Java / NetBSD / Oracle / PostgreSQL / UNIX の C言語 / UNIX のコマンド / Windows / bind / システム運用TIPS