AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 819824
Accepted
Richard T
Richard T
Asked: 2016-12-10 08:29:03 +0800 CST2016-12-10 08:29:03 +0800 CST 2016-12-10 08:29:03 +0800 CST

Apache 上的 JavaScript“AH01215:(8)Exec 格式错误”“头文件前的脚本输出结束”

  • 772

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

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

[Thu Dec 08 12:08:26.643037 2016] [cgi:error] [pid 27403] [client xx.xx.xx.xx:46247] AH01215: (8)Exec 格式错误:'/usr/www/http 的 exec /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,引用: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 来做到这一点?

为了使测试更容易一些,我在不同目录中的同名文件中创建了多个几乎相同代码的实例,并稍微更改了内容,以便我可以很容易地确定哪个位置对什么样的调用生效,一直查看 Apache 日志。以下是其中一个文件的示例:

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

textContent此代码采用第一个标记并将内容替换为第二行中提供的任何内容。显然,我正在更改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 条目 - 不知道它是否有任何作用!据我所知,没有任何效果。...而且,在我尝试的所有目录的主配置文件中都有这样的目录条目:

<Directory /usr/www/http/js/>
   AllowOverride None
   Options ExecCGI
   Require all granted
</Directory>

更新 弗雷迪想要一棵树。美好的:

树从虚拟主机的文档根目录开始——谁在乎呢?从那里:

├── index.html
├── js
│   └── test.js
└── test
    ├── js
    │   └── test.js
    └── testjs.html

3 directories, 4 files
javascript apache-2.4
  • 2 2 个回答
  • 2170 Views

2 个回答

  • Voted
  1. Best Answer
    Michael Hampton
    2016-12-10T09:09:41+08:002016-12-10T09:09:41+08:00

    这不是ScriptAlias目的。您不能将客户端 JavaScript 文件放在ScriptAlias指令中也有描述的目录中。

    ScriptAlias是一个 Apache 配置指令,告诉它尝试将该目录中的文件作为程序执行并返回程序的输出,而不是简单地将静态文件传输到用户代理。这显然不是你想要的。应该运行 JavaScript的是浏览器,而不是服务器。

    • 0
  2. Fredi
    2016-12-10T09:10:14+08:002016-12-10T09:10:14+08:00

    首先,我从您的问题中注意到了一些事情:

    • ScriptAlias 与客户端脚本无关,它用于服务器端脚本/CGI
    • 文件系统执行标志在客户端脚本上无关紧要

    • 在这个片段中:

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

    在我看来,你已经把完整的文件系统路径放在那里,你应该使用 URI 路径,注意区别。读取为 URI 路径,假设脚本可以从以下位置下载:

    http(s)://example.com/usr/WWW/http/js/test.js
    

    实际上,从我从您的日志中看到的情况是,Apache 正在尝试将 javascript 传递给 CGI 进程并失败了,实际上它是一个客户端脚本:

    [Thu Dec 08 12:08:26.643037 2016] [cgi:error] [pid 27403] [client xx.xx.xx.xx:46247] AH01215: (8)Exec 格式错误:'/usr/www/http 的 exec /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,引用:http ://example.com/test/jstest.html

    因此,首先将您的 javascripts 放在 ScriptAlias 路径之外。当我们这样做时,您可以在您的tree文档根目录上运行一个,您可以忽略文件,只需将 html 文件从您包含您的 javascript 和 javascript 本身的位置保留下来,这样我们就可以获得更好的图片。

    树输出后更新

    假设正在加载 javascript 的 html 页面是文档根目录中的 index.html,那么加载第一个 javascript 的正确方法$DOC_ROOT/js/test.js是:

    <script src="/js/test.js"></script>
    

    如果要加载第二个,即“测试”树下的那个:

    <script src="/test/js/test.js"></script>
    

    也就是说,文件系统 路径 $DOCUMENT_ROOT被翻译成_URI路径'/',或者http(s)://example.com/

    如果事情不起作用,请检查您的日志。如果您收到上述 AH01215 错误,请再次检查您的 ScriptAlias 设置(我知道您这样做了,但该错误与此有关)

    • 0

相关问题

  • 使用大量 javascript 的页面上的鱿鱼速度很慢

  • HTTP gzip压缩不适用于tomcat 6中的css或javascript

  • 客户端 Javascript --> 服务器端 Java --> 为用户提供 .doc

  • 是否有将 Virtual Server 2005 管理网站与 Internet Explorer 8 一起使用的解决方法?

  • 安装的 SP3 与集成的 SP3,默认安全设置有何不同?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve