1

Apache でサブドメインとして構成されたいくつかのサイトを持つ LAMP サーバーを使用しています。標準では、各サイト/サブドメインは /var/www/ 内のきちんとしたディレクトリにあります。いくつかの VirtualHosts を使用し、それぞれに DocumentRoot と ServerName を指定して、/etc/apache2/sites-available/ 構成ファイルで各サイトが存在する場所を Apache に伝えました。

ページに JavaScript を記述している場合、次のように、サイト ルートに基づいて他のページを参照できます。

include '/includes/something.js';

しかし、PHP で同じことを行うことはできません。PHP コードにファイルをインクルードする場合は、次のように入力する必要があります。

include '/var/www/site_name/includes/something.php';

(../includes/something.php のような相対参照を行うことはできますが、それはここでの論点ではありません。) なぜ /var/www/ が必要なのか混乱しましたが、これまでは単に迷惑。完全なディレクトリが必要であることがわかったら、それを回避するようにコーディングできました。しかし、今、PHPlist をインストールしようとしています。設定を保存するたびに、https://phplist.mydomain.org/var/www/phplist/admin/?page=configure のような URL にリダイレクトされます。もちろん、「ページが見つかりません」というエラーが表示されます。

私のApache / PHPセットアップがサイトルートをどのように扱うかについて、何かが台無しになっているようです。私は PHPlist コードを掘り下げていませんし、特に掘り下げたいとも思っていません。しかし、/var/www/ プレフィックスを必要とせずに PHP にファイルを含めることができるように設定を修正できれば、PHPlist もプレフィックスが過剰な URL を提供しなくなると思います。

参考までに、私の Apache 仮想ホストのほとんどがどのように見えるかを以下に示します。私の具体的な質問は次のとおりだと思います:1)私があなたに言ったことで、修正が必要なことは何かわかりますか?2) この奇妙さを理解するために、どこを見ますか、次に何を試みますか?

<VirtualHost 95.102.96.250:443>
  ServerName phplist.mydomain.org
  DocumentRoot /var/www/phplist
  ServerAdmin admin@mydomain.org

  <Directory /var/www/phplist/>
    Options +FollowSymLinks
    AllowOverride All
    order allow,deny
    allow from all
  </Directory>

</VirtualHost>

これが私の基本的な誤解であることを願っています。RingTFM を試しましたが、ここで何が起こっているのかわかりません。前もって感謝します!

4

3 に答える 3

2

一部の仮想サーバーは、その動作に基づいて$_SERVER['DOCUMENT_ROOT']、共有ホスティング ドキュメント ルートを指すのに使用せず、正しくない /var/www を指します。ただし、確認する必要があるものは提供$_SERVER['VIRTUAL_DOCUMENT_ROOT']されます。

于 2013-05-05T17:27:59.597 に答える
2

$_SERVER['DOCUMENT_ROOT']また、Apache で DocumentRoot が設定されているものにのみ解決されます。$_SERVER['DOCUMENT_ROOT']常に正しいディレクトリがあるとは限らないため、共有サーバーまたは仮想ホスト環境では使用しないでください。

インデックスファイルで次のようなものを使用することをお勧めします

define('DOCUMENT_ROOT', dirname(__FILE__));

DOCUMENT_ROOTこれにより、アプリのルートを常に正しく指すグローバルに定義された が作成されます。

于 2013-04-30T19:05:19.553 に答える