重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

wantと申します。
Webアプリケーションの構成に関して質問させて頂きます。

状況を説明すると、現在 httpd.confで
 DocumentRoot "/www/htdocs"
のように設定し、Webアプリケーションの構成は以下のようにしています。

/www/htdocs/site/ … PHPファイル(MVCモデルでいうCの部分)を配置
/www/htdocs/css/ … スタイルシートを配置
/www/htdocs/js/ … Javascriptファイルを配置
/www/docs/ … PHPファイル(MVCモデルでいうVの部分)を配置

/www/htdocs/site/ にある contrl.phpは、先頭で
set_include_path('../../');
を行い、プログラムの最後で、
require('docs/view.php');
とし、画面を呼んでいます。

/www/docs/ にある view.phpは、以下のようになっています。
<html>
<head>
<script language="JavaScript" src="../../js/test.js"></script>
<link href="../../css/test.css" rel="stylesheet" type="text/css">
</head>
<body>
<form name="form1" onSubmit="javascript:submitform()">
名前:<input type="text" name="fname" value="<?=$req['fname']?>" class="t01">
-(略)-

質問というのは、javascriptとcssのパス設定なんですが、
セキュリティ上、/www/js/ や /www/css/にファイルを置いて、
ブラウザからはアクセスできないようにしたいのですが、
/www/css/ のディレクトリにファイルを置いて、
正しいパスを設定しても、ファイルが正しく読み込まれません。(パーミッションは777)

それで、仕方なく/www/htdocs/js/ にファイルを置いているのですが、
この場合だと、http://localhost/js/test.js として
アクセスすると、ファイルにアクセスできてしまいます。

httpd.confで、アクセスできないようにすることも可能だとは思いますが、
/www/js/ のようにはできないのでしょうか?

A 回答 (3件)

 phpの include は WEBサーバー側での処理ですので、サーバー側の何処に置いてもアクセスできると思いますが、javascriptやスタイルシートはブラウザ側での(ローカルのパソコン側での)処理ですのでブラウザがアクセスできる場所に置いていなければいけなのだと思います。



 ただ、どうしても上記のような事を行いたいのなら、javascriptやスタイルシートのファイルも、phpによってHTML中にinclude してやるようにすればできると思いますが、この場合ソースは見られてしまいますので、wantedさんの目的に合うかはわかりませんが・・・。
    • good
    • 0

ドキュメントルートというキーワードがあります。

httpクライアント(ブラウザ)からhttpサーバにアクセスしたときに見えるルートディレクトリで、基本的にhttpサーバ側で設定します(apacheの場合はhttpd.conf)。その設定を見れば分かりますが、
document_root = /www/htdocs
という具合に、ファイルシステムのあるディレクトリ以下をWeb向けのルートディレクトリとして公開するワケです。

と、おそらくこのあたりは理解されていると思うのですが、htmlファイル(および、phpファイルの中でhtmlが記述されている部分)の中では、このドキュメントルート以下のファイル、つまり外から見えるファイルしか参照できません。
(wantさんの構成でいうと、おそらく/www/htdocsがドキュメントルートに設定されていると思うので、/www/htdocs/より下のディレクトリ・ファイルしかhtml内で参照できないことになります。)

逆に言うと、「.js」や「.css」を、一般ユーザーが見えないディレクトリに配置することは実質不可能なのです。
元々javascriptやcssは、htmlからプログラム部分・見た目部分だけを別ファイルに書き出したところから始まったので、外から見えてしまうのは当然の挙動とも言えるでしょう。

そもそも公開したくないロジック・情報をjavascriptで実装するのは、上記のjavascriptの仕様上ありえないので、別の手段を考えるべきです。
    • good
    • 0

MVCをかなり曲解されてるような?


それは、個人的な事として、
WEBサーバーからのアクセスとファイルシステムのアクセスを区別されるべきでしょう
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!