我在我的开发计算机上运行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
在文件名中麻烦。
好问题是:
为什么Apache声称,这是脚本,虽然.pl
(Perl?)文件名的一部分位于中间,文件名实际上以.js
或.json
结束?
为什么Apache for Windows 正在尝试执行Linux / Unix / Bash脚本,并且在第一行中查找#!
或'!
个字符?
更好的问题是,如何解决这个问题,所以Apache会像所有其他语言环境文件一样将这个文件视为一个简单的Javascript?并且不会尝试执行它?
答案 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.html
与welcome.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>