0

Apache 2.2.25 を実行しているホストされた Linux Web サーバーを使用しています。次の shtml は、スクリプトを実行するのではなく、perl スクリプトの内容を表示するだけです。スクリプトが ssh から実行されることを理解しています (ssh にアクセスできません)。.htaccess ファイルに何か不足していると確信しています。どんな助けでもありがたく受け取られます。

shtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Perl</title>
</head>
<body>

<!--#exec cgi="cgi-bin/test.pl"-->

</body>
</html>

パール (test.pl)

#!/usr/bin/perl
print "HELLO FROM PERL";

.htaccess

AddHandler cgi-bin .pl .cgi
AddType text/html .shtml .php
AddOutputFilter INCLUDES .shtml .php

Options +Includes
4

1 に答える 1

0

ExecCGI

あなたのcgi-binディレクトリは編集されていないと思います。その場合、ハンドラーの設定に加えてオプションScriptAliasを使用する必要があります。ExecCGI

AddHandler cgi-script .cgi .pl
Options +ExecCGI

また、Apache にスクリプトの実行権限があることを確認してください。詳細については、CGI を許可するように Apache を構成するを参照してください。

#include virtual

#include virtualまた、次の代わりにSSI コマンドを使用する必要があります#exec cgi

<!--#include virtual="/cgi-bin/test.pl" -->

Apacheマニュアルによると:

#include virtualほとんどの場合、#exec cgiまたはを使用するよりも を使用する方が好まれます#exec cmd。前者 ( #include virtual) は、標準の Apache サブリクエスト メカニズムを使用して、ファイルまたはスクリプトを含めます。それははるかによくテストされ、維持されています。

さらに悪い#execことに、Web サーバー上で任意のコードを実行するために使用される可能性があります。実際には、完全に無効にすることをお勧めします。

Options +IncludesNOEXEC

#includeまた、クエリ文字列を介して CGI に引数を渡すこともできます。

<!--#include virtual="/cgi-bin/test.pl?arg1=foo&arg2=bar" -->

ではできません#exec

渡す引数は、ファイル パスではなく#include virtual、現在のドキュメントに対する相対 URL であることに注意してください。

まだ読んでいない場合は、Apache のサーバー サイド インクルードの紹介を読むことをお勧めします。

XBitHack

最後に、SSI ファイルに特別なファイル拡張子 ( ) を要求する代わりに、次のディレクティブ.shtmlを使用することを好みます。XBitHack

XBitHack on

text/htmlユーザー実行ビットが設定されているファイルはすべて、SSI 用に解析されます。これは、ファイルに SSI を追加したいときに、ファイルの名前を変更する必要がないことを意味します (リンクやユーザーのブックマークを破壊する可能性があります)。

すべてをまとめると、次の.htaccessように設定します。

AddHandler cgi-script .cgi .pl
Options +ExecCGI +IncludesNOEXEC
XBitHack on
于 2014-01-24T19:08:14.527 に答える