2024/07/30(火) [n年前の日記]
#2 [linux][apache] テキストファイルがCGIとして扱われてしまって悩んだ
Webサーバ Apache2で公開しているディレクトリ内に、hoge.pl.txt や hoge.cgi.txt を置くと、何故か CGI として扱われてしまうようで、実行しようとしてエラーになることに気づいた。環境は Debian Linux 10 buster i686 + Apache2 2.4.59-1~deb10u1。
ファイル名の最後が .txt なのだからテキストファイル(text/plain)として扱われるはずでは…? もしかして、ファイル名に .pl や .cgi が含まれているだけで、CGI実行ファイルとして扱ってしまう…?
とりあえず、.htaccess に以下のような記述をして、テキストファイルとして扱われるようにしてみた。
余談。ググってみても、CGIとして動いてくれない状態を動くようにするための指定/記述ばかりで、その逆が全然見つからない…。Microsoft Copilot に何度も尋ねまくって色々試してみたけれど、どうやら RemoveHandler .pl .cgi が効いてくれたっぽい。
ファイル名の最後が .txt なのだからテキストファイル(text/plain)として扱われるはずでは…? もしかして、ファイル名に .pl や .cgi が含まれているだけで、CGI実行ファイルとして扱ってしまう…?
とりあえず、.htaccess に以下のような記述をして、テキストファイルとして扱われるようにしてみた。
Options +Indexes -ExecCGI +FollowSymLinks
AddType text/plain .pl.txt
AddType text/plain .cgi.txt
<FilesMatch "\.(pl|cgi|txt)$">
ForceType text/plain
SetHandler none
</FilesMatch>
<Files ~ "\.(pl|cgi)\.txt$">
ForceType text/plain
SetHandler none
RemoveHandler .pl .cgi
RemoveHandler cgi-script
</Files>
- Options -ExecCGI で、CGIを無効化
- FilesMatch や Files で、特定の拡張子のファイルに対して設定を変更する。
- ForceType text/plain で、強制的にテキストファイルとして扱う。
- RemoveHandler .pl .cgi で、.pl や .cgi をCGIファイルとして扱わないことにする。
余談。ググってみても、CGIとして動いてくれない状態を動くようにするための指定/記述ばかりで、その逆が全然見つからない…。Microsoft Copilot に何度も尋ねまくって色々試してみたけれど、どうやら RemoveHandler .pl .cgi が効いてくれたっぽい。
[ ツッコむ ]
以上です。