JavaScript“AH01215:(8)Exec格式错误”“在Apache

时间:2016-12-08 21:36:56

标签: javascript apache

最后时间将JavaScript应用到特定网站,所以我编写了一些在测试子目录中工作正常的代码,但是当我将其部署到网站时,我遇到了问题。当我尝试使用不在目录中的脚本文件或调用它的页面所在的子目录时,问题似乎是唯一的。这将是一个显示阻止,因为新功能需要在整个网站范围内,目录结构根据我们不需要进入的其他机制动态地改变;调用顶级脚本的能力至关重要。

所以,我把它全部拆分为两行非常简单的JavaScript,以帮助阐明问题;当它包含在调用html所在的目录中的文件中时,它可以工作,或者来自那里的子目录,或者如果我通过指向另一个位置的链接在同一目录中引用它,那也没关系。但是,如果我尝试以任何其他方式引用脚本文件,它将失败:

  

[Thu Dec 08 12:08:26.643037 2016] [cgi:error] [pid 27403] [客户   xx.xx.xx.xx:46247] AH01215:(8)执行格式错误:exec of   '/usr/www/http/js/test.js'失败了,引用者:   http://example.com/test/jstest.html [Thu Dec 08 12:08:26.643548 2016]   [cgi:error] [pid 27403] [client xx.xx.xx.xx:46247]脚本结束   标题前输出:test.js,referer:   http://example.com/test/jstest.html

当然,这里的xx.xx.xx.xx是服务器的IP,“example.com”是有问题的域,路径'/ usr / www / http'是Apache的顶级目录从这个域名的网站服务。

我已经阅读了很多这方面的材料,我知道Apache配置文件很重要...我已经尝试设置ScriptAlias并且有一些关于它的问题我似乎无法找到清晰度:

  1. 在HTML代码中,“ScriptAlias”目录中的脚本是如何引用的 - 首先是 斜线?是否有一些特殊的角色可以说“网站顶部?”和;
  2. 是否只允许一个唯一的ScriptAlias目录 整个网站,或者可以有一个搜索到的多个目录 - 如果是这样,你如何指定它们,ScriptAlias的多个定义,逗号 分开的名单等?和;
  3. 我们可以为每个VirtualHost设置一个吗?我们这样做是通过放一个 虚拟主机定义中的ScriptAlias?
  4. 为了使测试更容易一些,我在各个目录中的同名文件中创建了几个相同代码的多个实例,并稍微改变了内容,以便我可以轻松确定哪个位置对什么样的调用有效,一直在看Apache日志。以下是其中一个文件的示例:

    var myHeading = document.querySelector('h2');
    myHeading.textContent = 'website top level js dir';
    

    显然,我正在更改textContent以匹配位置。

    在HTML中,只要调用页面与test.js位于同一目录或父目录中,或者如果有一个指向test.js的链接,那么任何类似的引用都会起作用。同一目录或子目录:

    <script src="test.js"></script>
    <script src="js/test.js"></script>
    <script src="http://example.com/test/js/test.js"></script>
    

    在HTML中,只要调用的html不在同一目录或父目录中,任何像这样的引用都会失败,无论我尝试什么:

    <script src="/js/test.js"></script>
    <script src="/usr/WWW/http/js/test.js></script>
    <script src="http://example.com/test/js/test.js"></script>
    

    所涉及的目录和文件都归我个人的UID和GID所有(一如既往),他们的权限都是755。

    有一个全局ScriptAlias定义为(也试过这个变种):

    ScriptAlias /js/ "/usr/www/js/"
    

    虚拟主机定义中还有另一个ScriptAlias条目 - 不知道它是否有任何作用!

    好的,我没有想法!

1 个答案:

答案 0 :(得分:1)

最简单地说:

Apache假设来自任何ScriptAlias指令中标识的任何目录的所有内容都是供服务器执行而不是按原样传递给客户端以便在那里执行。因此,放在这样的目录中的客户端脚本将无法按预期运行。

不幸的是,这意味着服务器端和客户端脚本不能共存于一个目录中(除非通过使用链接,但我没有测试这种可能性)。

另外,显然对于客户端脚本,VirtualHost的{​​{1}}变为/用于HTML中的路径规范,尽管我相信(并且没有测试)服务器端脚本可以通过服务器的目录树上的完整路径指定,从真正的根开始 - 或者,可能再次,可能通过链接,但我也没有测试。

这里还有一个关于测试的小课:如果我没有添加ScriptAlias指令,我会更早地遇到这个解决方案,所以我们的课程是跟踪你在让事情变得有效的环境有时您需要对其他更改取消更改以获得适当的效果。经验教训很久以前,今天重新学习!当你再次犯错时,经验就会意识到错误!