6

プロジェクトをテストするために開発マシンで実行XAMPP 1.8.1しています。Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7私のプライベート プロジェクトと有名な Bootstrap Datepicker コンポーネントの両方で、任意の言語 (datepicker の場合は 38 のうちの 1 つ) を選択できますが、 Polish は選択できません

詳細な調査の結果、これが原因であることがわかりました。ブラウザーがロケール ファイル (general.pl.json私のプロジェクトのbootstrap-datepicker.pl.js場合は 、Bootstrap Datepicker の場合は ) を読み込もうとすると、サーバー (Apache) が で失敗するため500 Internal Server Errorです。

Apache ファイルを分析した後error.log、Apache がこのファイルを (おそらく Perl) 実行可能スクリプトとして実行しようとしているため、これが起こっていることがわかりました。

[win32:error] [pid 5128:tid 1680] [client 127.0.0.1:53455] AH02102: C:/XAMPP/htdocs/mobile/public/pg-demo-bootstrap/locales/general.pl.json is not executable; ensure interpreted scripts have "#!" or "'!" first line, referer: http://127.0.0.1/mobile/public/pg-demo-bootstrap/
[cgi:error] [pid 5128:tid 1680] (9)Bad file descriptor: [client 127.0.0.1:53455] AH01222: don't know how to spawn child process: C:/XAMPP/htdocs/mobile/public/pg-demo-bootstrap/locales/general.pl.json, referer: http://127.0.0.1/mobile/public/pg-demo-bootstrap/
[win32:error] [pid 5128:tid 1644] [client 127.0.0.1:53465] AH02102: C:/XAMPP/htdocs/us/ustv/assets/6dafd2fe/js/locales/bootstrap-datepicker.pl.js is not executable; ensure interpreted scripts have "#!" or "'!" first line, referer: http://127.0.0.1/us/ustv/content/manage/update.html?id=4
[cgi:error] [pid 5128:tid 1644] (9)Bad file descriptor: [client 127.0.0.1:53465] AH01222: don't know how to spawn child process: C:/XAMPP/htdocs/us/ustv/assets/6dafd2fe/js/locales/bootstrap-datepicker.pl.js, referer: http://127.0.0.1/us/ustv/content/manage/update.html?id=4

コンテンツとファイル名を変更して多くのテストを行い、多くの偽のファイルを使用してこのファイル (ポーランド語のロケール) を偽装しましたが、コンテンツは問題ではなく.pl、ファイル名だけが問題を引き起こすという結論に至りました。

良い質問は次のとおりです。

  1. .pl(Perl?)ファイル名の一部が途中にあり、ファイル名が実際に.jsまたはで終わるのに、Apacheが主張するのはなぜ.jsonですか?

  2. Apache for Windowsが Linux/Unix/Bash スクリプトを実行しようとして、その最初の行にある文字#!または文字を探しているのはなぜですか?'!

さらに良い質問は、これを修正する方法です.Apacheはこのファイルを他のすべてのロケールファイルと同様に単純なJavascriptとして扱い始めますか? そしてそれを実行しようとしませんか?

4

3 に答える 3

6

xampp\apache\conf\httpd.conf に、次のような行があるはずです。

AddHandler cgi-script .cgi .pl .asp

次のように、この行をコメントアウトするだけです。

#AddHandler cgi-script .cgi .pl .asp

そしてApacheを再起動します。.cgi および .asp ハンドラを保持したい場合は、行から .pl を削除するだけです。これを行っても、Perl は実際には動作します。

于 2013-07-25T20:41:46.207 に答える
2

Apache ログに次のメッセージが表示される場合

apache: .js は実行できません。解釈されたスクリプトに「#!」が含まれていることを確認します

以下のように、構成ファイルを変更し、ScriptAlias の代わりに Alias を使用する必要があります。

エイリアス /bugzilla/ "C:/bugzilla/"

そして、apache config のエイリアス行の後に以下のスニペットを追加します。

<Directory "C:/bugzilla">
    ScriptInterpreterSource Registry-Strict
    AddHandler cgi-script .cgi
    Options +ExecCGI +FollowSymLinks
    DirectoryIndex index.cgi index.html
    AllowOverride Limit FileInfo Indexes Options AuthConfig
    Require all granted
</Directory>
于 2018-09-19T07:28:06.803 に答える