株式会社エスロジカル
株式会社エスロジカル
セキュリティ、Web開発、Unix開発、Go言語

■ Apache:CGIのnphスクリプト

技術ドキュメント目次 -> Apache -> CGIのnphスクリプト

本技術ドキュメントは、ここしばらくメンテナンスをしておりません。
内容が古くなっている可能性などございますこと、ご理解を頂けますようお願いいたします。


サイフにやさしいSSL証明書
【低価格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 についての他のドキュメント


■ 他のグループのドキュメント

Apache  /  Linux  /  FreeBSD  /  OpenSSL  /  Perl  /  HTTPプロトコル  /  Jakarta Tomcat  /  Java  /  NetBSD  /  Oracle  /  PostgreSQL  /  UNIX の C言語  /  UNIX のコマンド  /  Windows  /  bind  /  システム運用TIPS

アンケートにご協力をお願いいたします。

1. このドキュメントへの評価をご選択ください。
         

2. ご感想をお書きください。