2016-12-08 17 views
0

最後に、特定のWebサイトにJavaScriptを適用するために、テストサブディレクトリで正常に動作するコードを書きました。しかし、これをWebサイトに展開すると、私は問題に遭遇しました。問題は、ディレクトリ内にないスクリプトファイルを使用しようとしているときや、呼び出し元のページがどこにあるサブディレクトリを使用しようとしているときにユニークなように見えます。新しい機能がサイト全体に必要となり、ディレクトリ構造が動的に変化するため、ここで取り入れる必要のない他のメカニズムに基づいています。トップレベルのスクリプトを呼び出す能力が不可欠です。JavaScript「AH01215:(8)Exec形式のエラー」「Apacheより前のスクリプト出力の終了」

したがって、問題を明らかにするために、2行の非常に単純なJavaScriptをすべて削除しました。呼び出し元のHTMLが存在するディレクトリ内のファイルに含まれている場合、それが動作しているか、そこからのサブディレクトリであるか、別の場所へのリンクを介して同じディレクトリで参照していれば問題ありません。しかし、私は試してみて、他の方法でスクリプトファイルを参照する場合、それはで失敗します。

ここ

[Thu Dec 08 12:08:26.643037 2016] [cgi:error] [pid 27403] [client xx.xx.xx.xx:46247] AH01215: (8)Exec format error: exec of '/usr/www/http/js/test.js' failed, referer: http://example.com/test/jstest.html [Thu Dec 08 12:08:26.643548 2016] [cgi:error] [pid 27403] [client xx.xx.xx.xx:46247] End of script output before headers: test.js, referer: http://example.com/test/jstest.html

、もちろん、XX.XX.XX.XXは、サーバーのIPで、「example.com」問題のドメインであり、パス '/ usr/www/http'は、このドメインのWebサイトからApacheが提供する最上位ディレクトリです。

私はこれに関する多くの資料を読んできましたが、私はApache構成ファイルが重要であることを知っています... ScriptAliasを設定しようとしましたが、それについていくつかの質問があります:

  • 「ScriptAlias」ディレクトリ内のスクリプトは、HTMLコード内でどのように参照されますか? はスラッシュで始まりますか? 「サイトのトップ?」と言う特殊な文字はありますか?そして;
  • 一つだけのユニークなScriptAliasのディレクトリが サイト全体に許可、または1つが検索されている複数のディレクトリを持つことができますあり - もしそうなら、どのようになど、ScriptAliasも、コンマ 区切りリストの複数の定義を、それらを指定するのですか?そして;
  • VirtualHostごとに1つを設定できますか?これを行うには、 ScriptAliasを仮想ホスト定義の中に入れます。
  • テストを少し簡単にするために、私はさまざまなディレクトリ内の同じ名前のファイルでほぼ同じコードの複数のインスタンスを作成し、内容を少し変更して、どのような場所がどのような場所その間、Apacheのログを見ている間に、これらのファイルの例を次に示します。

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

    明らかに、私は場所が何であるかと一致するようにtextContentを変更していました。

    HTMLの場合、呼び出しページがtest.jsと同じディレクトリにあるか、親ディレクトリにあるか、test.jsへのリンクがあった同じディレクトリまたはサブディレクトリ:

    <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> 
    
    :HTMLで

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

    は、これらのような任意の参照は、常に呼び出し元のHTMLは、同じディレクトリまたは親ディレクトリになかったように私はそう長くしようとした何に関係なく、失敗しました

    関連するディレクトリとファイルはすべて私の所有です個人UIDとGID(いつものように)、その権限はすべて755です。

    (この上も試したのバリエーション)として定義されたグローバルScriptAliasもあります:

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

    は、仮想ホスト定義で別のScriptAliasのエントリーがあります - それは何もしない場合は全く分かりません!

    OK、私はアイデアの出です!

    最も簡単に入れ

    答えて

    1

    ApacheはどのScriptAliasディレクティブで識別されます任意のディレクトリからのすべてのコンテンツはそのままですが、実行のためにクライアントに渡すのではなく、実行するサーバーのために意図されていることを前提としています。したがって、そのようなディレクトリの内部に置かれたクライアント側のスクリプトは意図したとおりに機能しません。

    残念ながら、これは、サーバ側とクライアント側のスクリプトは、(リンクの使用を経由して、おそらく、を除いて、私はその可能性をテストしていない)1つのディレクトリに共存できないことを意味します。私は信じている(とテストしていない)にもかかわらず

    また、明らかにクライアント側スクリプトのために、VirtualHostDocumentRootは、HTMLでのパス指定の目的のために/なり、そのサーバー側のスクリプトはフルパスで指定することができますサーバーのディレクトリツリー上の実際のルートで始まる - または、もう一度、おそらくリンクを介して、私はどちらかそれをテストしていませんでした。

    テストについて、ここで小さなレッスンもあります:私はScriptAliasディレクティブを追加していなかった場合、私はすぐに、このソリューションに遭遇してきただろう、とその教訓は、物事を得るためにあなたが環境の変化何を追跡することです他の変更が適切な効果を持つように変更を取り消す必要がある場合があります。レッスンはLONG​​-agoを学んだ、今日再学習しました!経験は、あなたがもう一度それを作るときの間違いを認識しています!

    関連する問題