Apache / XAMPP for Windows错误地将文件视为可执行文件

时间:2013-07-16 08:40:44

标签: javascript apache xampp executable

我在我的开发计算机上运行XAMPP 1.8.1 Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7来测试我的项目。在我的私人项目和众所周知的Bootstrap Datepicker组件中,我可以选择任何语言(在datepicker的情况下为38之一)但不是波兰语

经过深入调查,我发现这是由于浏览器尝试加载语言环境文件(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. 为什么Apache声称,这是脚本,虽然.pl(Perl?)文件名的一部分位于中间,文件名实际上以.js.json结束?

  2. 为什么Apache for Windows 正在尝试执行Linux / Unix / Bash脚本,并且在第一行中查找#!'!个字符?

  3. 更好的问题是,如何解决这个问题,所以Apache会像所有其他语言环境文件一样将这个文件视为一个简单的Javascript?并且不会尝试执行它?

3 个答案:

答案 0 :(得分:5)

在xampp \ apache \ conf \ httpd.conf中,应该有一行代码:

AddHandler cgi-script .cgi .pl .asp

只需注释掉这一行:

#AddHandler cgi-script .cgi .pl .asp

并重启Apache。如果要保留.cgi和.asp处理程序,只需从行中删除.pl即可。即使你这样做,Perl实际上仍然可以工作。

答案 1 :(得分:4)

我遇到了同样的问题,之前的回答并没有为我解决问题,而是引导我到http://httpd.apache.org/docs/2.2/mod/mod_mime.html#addhandler的Apache文档说:

  

文件名可能有multiple extensions,扩展参数也可以   与每个人进行比较。

multiple extensions链接指向同一页面上的另一部分,说明文件可以包含多个扩展名。即:welcome.fr.htmlwelcome.html.fr的处理方式相同。扩展名的顺序无关紧要,文件名甚至可以包含welcome.html.en.de中的多种语言。优点是定义的语言在HTTP头中发送。

仅根据最终扩展名配置处理程序:

<FilesMatch \.pl$>
SetHandler cgi-script pl
</FilesMatch>

为了完成这项工作,我必须首先删除pl的处理程序:

RemoveHandler pl

答案 2 :(得分:1)

如果在apache中出现,请记录以下消息

  

apache:.js无法执行;确保解释后的脚本具有“#!”

您应该修改配置文件并使用Alias代替ScriptAlias,如下所示:

  

别名/ bugzilla /“ C:/ bugzilla /”

并在别名行后的apache配置中添加以下代码段。

<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>