jQueryのAjaxでルートディレクトリより上のファイルを指定できないのか?

このQ&Aのポイント
  • JavaScriptのjQueryのAjaxを使用して、ルートディレクトリより上の階層にあるファイルを指定することはできないのでしょうか?具体的な例として、index.html内で記述されているAjaxでexe/test.phpを呼び出したいと考えています。しかし、実行すると「404 Not Found http://www.samplecom/exe/test.php」というエラーが発生してしまいます。
  • この問題の原因は、「../exe/test.php」と指定しているにもかかわらず、ルート直下の「exe/test.php」を指定しているような結果になってしまうことです。JavaScriptではルートディレクトリより上のファイルを指定することはできないのでしょうか?
  • 残念ながら、JavaScriptのjQueryのAjaxではルートディレクトリより上のファイルを直接指定することはできません。Ajaxを使用する場合、指定するURLは現在のページのURLを基準に相対パスで指定する必要があります。そのため、「../」を使用して親ディレクトリにアクセスすることはできません。しかし、別の方法として、Ajaxリクエストを受け取って指定したファイルを実行するためのサーバーサイドの処理を行うことで、目的のファイルを実行することが可能です。
回答を見る
  • ベストアンサー

jsでルートディレクトリより上のファイル

jQueryのAjaxでurlをルートディレクトリより上の階層にあるファイルを指定できないのでしょうか? 具体的には以下のような階層になっていてindex.html内で記述されているAjaxでexe/test.phpを呼び出したいと思っています。 サーバールート ├home(ルートディレクトリ) │└index.html └exe   └test.php index.html内に記述されているjavascript $.ajax({  type: 'post',  url: '../exe/test.php',  dataType: 'html',  … }); これを実行すると、FireBugで「404 Not Found http://www.samplecom/exe/test.php」と出てしまいます。 つまり、'../exe/test.php'と指定しているのにルート直下の「exe/test.php」を指定しているかのような結果になってしまっています。 javascriptではルートディレクトリより上のファイルを指定できないのでしょうか?

  • suffre
  • お礼率76% (2013/2633)

質問者が選んだベストアンサー

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.2

JavaScript (が動作しているブラウザ)からは、 URL でしか他のファイルを参照できません。 URL とサーバー内部のパスは別物ですので、 ご利用しているWebサーバーの仕様を確認してください。 もし仕様が /home/* => URL は http://www.example.com/homepage/* /exe/* => URL は http://www.example.com/cgi-bin/* ならば、以下の様にしてください。 $.ajax({url:'/cgi-bin/test.php', ... }) 余談ではありますが もし仕様が /home/* => URL は http://www.example.com/* /exe/* => URL は http://cgi.example.com/* ならば、クロスドメイン問題が発生するのでご注意ください

suffre
質問者

お礼

ありがとうございます。参考になりました。 仕方ないのでexeフォルダをホームディレクトリ(http://www.example.com/)より下に置きます。 セキュリティの観点から重要なphpファイルはホームディレクトリより上の階層に置こうと思いましたがダメみたいですね…。

suffre
質問者

補足

すみません、ホームディレクトリはルートディレクトリの間違いです。

その他の回答 (2)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 >ローカルPC上で開発しているときはルートより上を指定しても大丈夫だったので >サーバーにアップしてから気づきました。 xamppなりで開発環境としてローカルにもWebサーバを作っておいたほうが、確実に開発できますよ。

suffre
質問者

お礼

ありがとうございます。 一応XAMPPでやっているのですが、ホームディレクトリより上の階層でもアクセスできてしまいました…。

suffre
質問者

補足

すみません、ホームディレクトリはルートディレクトリの間違いです。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 ルートディレクトリより上ってことは通常のhttpアクセスじゃ見えない領域ってことですよね? それなら無理です。 ブラウザに直接対象のアドレスを入力して、参照できる範囲しか指定できませんよ。 ルートより上ってことはurlが無いわけですから。

suffre
質問者

お礼

ありがとうございます。 javascriptではルートより上は無理だったのですね。 ローカルPC上で開発しているときはルートより上を指定しても大丈夫だったので サーバーにアップしてから気づきました。 仕方ないのでphpをルートより下に置くことにします。

関連するQ&A

  • dojoをドキュメントルートの上の階層のディレクトリへ移動したら、do

    dojoをドキュメントルートの上の階層のディレクトリへ移動したら、dojoファイルを読み込めなくなりました。 絶対パスとかで試したりもしたのですが、うまくいきません。 もしかして、下記記述は、ドキュメントルート外では、使えないのでしょうか? <script type="text/javascript" src="… それとも、単にパスの記述が間違っているのでしょうか? 環境 ・レンタルサーバー やりたいこと ・dojoライブラリのファイル数が多かったので、ドメイン毎に設置するのは大変だと思い、 ドキュメントルート上の階層へ一つだけ配置して、複数のドメインには、それを読み込ませるようにしたいのですが……。

  • ドキュメントルートより上のディレクトリにあるPHPファイルをインクルードするには?

    外部に公開する必要がないディレクトリをドキュメントルートの外に置く構成のPHPプログラムを使用したいのですが、ドキュメントルートより上のディレクトリのPHPファイルをインクルードするにはどうすればよいのでしょうか? 例えば、DocumentoRootが/var/www/htmlで、 /var/www/html/test.phpから/var/www/data/include.phpをインクルードするようなケースです。 include.phpをtest.phpと同じディレクトリ(/var/www/html/)に置いた場合はインクルードできることを確認しています。 パーミッションは設定してあります。 phpinfo()でinclude_pathは「.:」となっています。 http.conf、php.ini等も編集することができる環境です。 ご存知の方がいらっしゃいましたら、アドバイスをお願いいたします。

    • ベストアンサー
    • PHP
  • ディレクトリ構成変更に伴うファイルへのリンク変更

    質問させていただきます。 現在、Aをルートディレクトリとする階層があります。 その階層のディレクトリ構成を変更して、 Bをルートディレクトリとする階層にします。 この状況で、 「Aの階層のファイルがBの階層のどこに行ったか?」 を調査したいです。 最初にtest.fileが 【A\123\test.file】 があったとして、 【B\456\789\test.file】 に位置が変更されたのならば、 「test.file」は A\123\test.fileからB\456\789\test.fileに変わった。 のようにです。 そのような調査ができるツールや、 簡単なプログラムの作成の仕方など ご存知の方いらっしゃいませんでしょうか? 正直、かなり困っております。 大変申し訳ありませんが、 宜しくお願いいたします。

  • php,flashファイルの設置、実行場所

    お世話になります。phpファイル実行の質問です。 phpが使用できるレンタルサーバーで、ルートディレクトリの下に任意にサブディレクトリを作成してそこにphpファイルを置いて ブラウザでURLを入力して、実行することはできるのですね。 また、flash,phpファイルを連携させる場合では両方のファイルを適当なサブディレクトリに置いてflashファイルをパブリッシュ したhtmlファイルを実行すればよいのですね。 その場合、flashに記述するURLですが(ルート直下のsabuディレクトリにtest.phpを設置する場合) http://localhost/test.phpでしょうか、それともhttp://localhost/sabu/test.phpでしょうか? パソコンの場合はhtdocsやwwwフォルダにphpやhtml,flashファイルを入れてブラウザでurlを記述して実行するのですね。 この場合パスを設定してどこのディレクトリに置いても実行することはできるのでしょうか? よろしくお願いいたします。

  • 外部 .js で

    index.html 内の head タグ間に <script type="text/javascript" src="./js/test2.js"></script> また、index.html と同階層にある js ディレクトリの内の test2.js の内容は document.write("test") だけです。 この条件で(というのは、最終的に別にテキストを出したいだけというわけではないので)、body の任意の場所に test を表示 [記述] させる方法を教えてください。 body の適当な場所に <script type="text/javascript"></script> と書いても、何も現れません(ソースで確かめています)。根本的におかしいのかもしれませんが、わかりません。 必ず、これら条件でお願いします。

  • exec()で他ディレクトリのexeプログラムを実行したい

    url2bmpという、指定したURLのスクリーンショットを作成できるコマンドライン対応のソフトを使用しています。これをPHPから実行させたく、exec()関数を使っています。PHPプログラムとexeプログラムは同じ階層にあり、コードは exec("url2bmp.exe 以下、引数"); のようにしており、問題なく動作していました。 その後、url2bmp.exeを1階層下のフォルダに移し、コードも修正したのですが、動かなくなってしまいました。コードは以下の通りで exec("kasou/url2bmp.exe 以下、引数"); ディレクトリ指定は間違っていないはずであり、原因は明らかにurl2bmp.exeがPHPプログラムと同じディレクトリにないことなのですが、これの対処法は存在しないのでしょうか?同じコードをコマンドプロンプトで実行するとうまくいくのに、exec()関数では動かないという点に納得がいきません。

    • ベストアンサー
    • PHP
  • 定数が保持されない!(ディレクトリによって異なる!)

    PHP内のファイルで定義した定数を、そのファイルから呼び出された他のファイルで読み込めません。ディレクトリによって、その定数を読めるファイルと読めないファイルがあります。 他の環境で動いていたファイルを持ってきただけなのに、なぜでしょうか? Apache等の設定で「ディレクトリ間の定数保持の制限」のようなものがあるのでしょうか? お願いします! 【具体的には以下です。】 indexファイルからdefaultファイルをインクルードし、その中で定数を定義。 次に、indexから同じディレクトリのファイルをインクルードし、その中から定数を呼び出し成功。 最後に、indexから遠いディレクトリのファイルをインクルードし、その中から定数を読み込むが、不成功。 【ファイルの記述は以下です。】 ファイル「index.php」内の記述 require('../../inc/default.php'); //←この中で定数PATHTESTを定義。 var_dump(PATHTEST); //←これは成功。 require("./test.php"); //←この中では定数PATHTESTが読める require(PATHTEST."/test_ini.php"); //←この中では定数PATHTESTが読みこめない。 ファイル「default.php」内の記述 define("PATHTEST","http://localhost/www/inc/ini"); ファイル「test.php」内の記述 var_dump(PATHTEST); //←これは成功。 ファイル「test_ini.php」内の記述 var_dump(PATHTEST); //←これは読み込めない。 【ブラウザ上からの結果確認。】 string(28) "http://localhost/www/inc/ini" string(28) "http://localhost/www/inc/ini" string(8) "PATHTEST" 【環境】 今の環境:WindowsXP, Apache2, PHP5 これらが動いていた環境:LINUX, Apache(1か2か不明), PHP4 以上です。お手数ですが、教えてください!

    • ベストアンサー
    • PHP
  • PHPでのドキュメントルート指定方法

    PHPでのドキュメントルートの指定方法がうまくいかず困っています。 マルチドメインで組んでいます。 公開ディレクトリのルートは /home/hoge/www になります。 wwwの中に/piyo/でマルチドメインを組んでいます。 →絶対リンクを/home/hoge/www/piyo/ ここに指定したいです。 あるサイトを見てcommon.phpを作成し、index.phpと同じ階層に置き、index.phpの頭に <?php include 'common.php'; ?> を指定すると設定ができると記載されていたので下記の様に設定しました。 // common.php // <?php // サーバー上の絶対パスを記入 // これは公開ディレクトリのルート(サイトのルートディレクトリ)と一致 $__DOC_ROOT__ = '/home/hoge/www/piyo/ <http://piyo.co.jp/> '; ?> // index.php // <?php include 'common.php'; ?> <!doctype html> <html lang="ja"> … <?php echo $_SERVER['DOCUMENT_ROOT']; ?> … </html> echoで呼び出してみましたがサイトのルートディレクトリが /home/hoge/www こちらになり変更されていませんでした。 これを /home/hoge/www/piyo/ に変更したいと思います。 ご回答よろしくお願い致します。

    • ベストアンサー
    • PHP
  • index htmlをディレクトリの上に置くやり方をおしえてください

    今忍者の無料ホームページを作成中です。 しかし何かのミスでブラウザからURLが表示されません。 忍者に質問しましたら以下返信メールを頂きました。 index html がホームぺージ¥testと言うフォルダーの中に 保管されていてしまっているためデフォルトの方が反映されています。 index html ファイルをホームページ¥testより取り出し ホームページ¥testのアップロードされているディレクトリの上 に置くようにしてくださいとのことです。しかしやり方が今一 わかりません。おしえてください。

  • アクセスされたくないファイルの取り扱いについて

    いつもお世話になっております。 データベースを呼び出す際に必要なパスワードが記述されているファイルをindex.phpと同階層に置いているのですが、これはセキュリティ上よくないと思います。 このようなファイルは、一般的にはどのように取り扱うべきなのでしょうか? 無料スペースを借りているため、publicより上の階層にファイルをアップロードすることはできない状況です。 例えば、index.phpが置いてある階層の下にsecretというディレクトリを作成し、 .htaccessによりsecret階層にアクセス制限をかければよいのかなと考えましたが、 よりよい方法をご存知でしたら教えていただけますと幸いです。 よろしくお願いします。

    • ベストアンサー
    • PHP