Pythonで簡単なテストページを設定しています。 .htaccessとindex.pyの2つのファイルしかありません。 (両方のアクセス許可が755に設定されています)ページを表示しようとすると403 Forbiddenエラーが発生します-これを修正するにはどうすればよいですか?
.htaccess:
RewriteEngine On
AddHandler application/x-httpd-cgi .py
DirectoryIndex index.py
index.py:
#!/usr/bin/python
print "Content-type: text/html\n\n"
print "test"
エラーログを確認しましたか?それは最初に見る場所です。
あなたのAddHandler
は間違っていると思います。 documentation は、次のように使用されていることを示しています。
構文:AddHandlerハンドラー名拡張子[拡張子].。
application/x-httpd-cgi
はハンドラーではなく、MIMEタイプです。
おそらくExecCGI
をオンにする必要があります( docs を参照)。これは通常/cgi-bin/
で有効になっていますが、ファイルがそこにない場合は、.htaccess
に次のようなものが必要になります。
Options +ExecCGI
AddHandler cgi-script .py
これは、サーバーが.htaccess
ファイルを許可することに依存しています。 AllowOverride
ドキュメント を参照してください。
RewriteEngine On
は必要ありません。DirectoryIndex
は、ファイル名のない包含ディレクトリ(つまり、/python/
)にアクセスしたときに返されるファイルを設定するだけです。
このソリューションは、.py
を使用してmod_cgi
スクリプトの実行を可能にするだけです。 mod_python
を提案している他のソリューションも機能しますが、これはより複雑で、ApacheプロセスにPythonインタープリターが組み込まれています。これは、システムPythonインタープリターを使用した直接実行には必要ありません。
AddHandler
をAddHandler mod_python .py
に変更します。
/etc/Apache2/mods-available/dir.conf
でDirectoryIndex
を使用する代わりに、index.py
を編集してそこに.htaccess
を追加したいと思います。
index.py
を次のように変更します。
#!/usr/bin/env python
def index(req):
return "test"
ファイルシステムのどこでこれを行っているかについて言及していないことに気づきました。作業中のフォルダーにApache構成内でアクセス許可が設定されていない場合、ファイルシステムに設定されているUnixアクセス許可に関係なく、403を取得します。 Apacheは、構成で使用できると言われていない場所に物理的に保存されているファイルを提供しません。
おそらく通常のWebディレクトリ内で作業しているので、これはおそらくロングショットですが、それでもテストする価値があります。プレーンテキストファイルを同じフォルダーに貼り付けて表示してみてください。表示された場合は問題ありません。それでも403が表示される場合は、Apache構成を確認してください。
それ以外は、markdraytonの提案は的を射ていると思います。
サーバーでこれを試したところ、問題なく動作しました。
また、これらのファイルをhtaccessに追加してみてください(必要に応じて置き換えます)。
AddHandler mod_python .py
PythonHandler index
PythonDebug On
私の別のシステムでは、python処理を機能させるために(mod_pythonを使用して)これらの行が必要でした。
ディレクトリが表示可能であることを確認しましたか?ディレクトリに関する権限の問題が、過去に含まれていたファイルに干渉することがありました。
また、.htaccessはPerlやbashなどの他のスクリプトでも機能しますか?
通常、Apache構成ファイルにはPython(mod-pythonに渡されたと思います)のデフォルトハンドラーがあります。htaccessを削除すると、スクリプトはデフォルトハンドラーを使用して実行されますか?