web-dev-qa-db-ja.com

ローカルPHP開発セットアップでDOCUMENT_ROOTとサイトルートを設定するにはどうすればよいですか?

私はオンラインのサイトを持つ男のために仕事をしています。それは私にとって異星人のサイトであり、私はゆっくりと奇妙なコードに取り組んでいます。私はMAMPをローカルで使用していて、 http:// localhost / から多くのクライアントフォルダーが削除されています。このコードの中に$ _SERVER ['document_root']コマンドと参照のようなものがたくさんあります  私のローカルPHP devエリアで迷子になっています。

どうすればdocument_root参照を本来あるべき状態に簡単に設定できますか? PHPはサイトのルートが正しいと考えているので、画像のsrc参照 "/ images/..."が正しく表示される間接設定の方法はありますか...私のローカルPHPこのサイトの開発URLは次のとおりです: http:// localhost:8888/_CLIENTS/clientsite/www / ...ただし、コードの先頭にある「/」 '/ images/...'は参照しています http:// localhost:8888 / ??

ありがとうございました。

13
James

@ Eddieの回答 私は大いに役立ちましたが、OSXでXAMPPを使用して同じ問題を自分で解決するには、まだ少し追加の調査を行う必要がありました。後世のためにここに私の完全な解決策を追加すると思いました。

まず、次のエントリをhttpd-vhosts.conf(XAMPPの「etc/extra /」フォルダの下)に追加しました。

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/Applications/xampp/xamppfiles/htdocs/"
</VirtualHost>
<VirtualHost *:80>
    ServerName client1.my-machine
    DocumentRoot "/Applications/xampp/xamppfiles/htdocs/clients/client1/"
</VirtualHost>
<VirtualHost *:80>
    ServerName client2.my-machine
    DocumentRoot "/Applications/xampp/xamppfiles/htdocs/clients/client2/"
</VirtualHost>

VirtualHost URLに「localhost」ではなくワイルドカードを具体的に使用し、各サブドメイン名を指定したServerName構成を追加したことに注意してください。また、「localhost」ではなく自分のマシン名(「my-machine」)を使用したことにも注意してください。これにより、(localhostだけでなく)任意のマシンからのすべてのリクエストを適切に評価できます。私はOSXで開発していますが、Parallelsを介してさまざまなVMでブラウザをテストしています。このアプローチを使用すると、任意のマシンから http://client1.my-machine にアクセスできます。または、ネットワーク上のVM。「localhost」を指定すると、私の開発マシン。

[〜#〜]注[〜#〜]:最初のVirtualHostエントリがデフォルトとして使用されます(ここで説明します: http: //httpd.Apache.org/docs/2.2/vhosts/name-based.html )であり、リクエストがデフォルトでカスタムサイトの1つにならないようにするために必要です。

@ Eddie's answer に示すように、httpd.confに権限設定も追加しました。これは常に必要なわけではありませんが、この変更を行う必要がある2つの個別のケースに遭遇しました。

  • 新しいサイトをデフォルトのXAMPP httpルート以外のディレクトリに配置する(基本的に、http経由でアクセスできるすべてのパスには、明示的な権限セットが必要です)
  • 仮想ホストとして設定されたサイト(デフォルトのhttpパスの下)にmod_rewriteルールを追加すると、「。htaccess:RewriteEngine not allowed here」というエラーが発生しました。 AllowOverrideオプションに関するhttpd.confのコメントを読むと、エラーの原因が明らかになりますが、以前はそれを見落としていました。これを「すべて」に変更すると、エラーが修正されました。

Httpd.confの編集中に、次の行のコメントを解除する必要がある場合があることに注意してください(デフォルトではコメントアウトされています)。そうしないと、上記で行ったvhostsの変更が有効になりません。

# Virtual hosts
Include /Applications/xampp/etc/extra/httpd-vhosts.conf

最後に、上記のコメントに記載されているように、hostsファイルにカスタムドメイン名を追加する必要もありました。 OSXでは、 "/ private/etc/hosts"(Windowsでは "Windows/System32/drivers/etc/hosts")を編集して次の行を追加します。

127.0.0.1   my-machine
127.0.0.1   client1.my-machine
127.0.0.1   client2.my-machine

[〜#〜]注[〜#〜]:デフォルトのOSX Finder UIでは、隠しフォルダー(/ privateを含む)は表示されません。これは、Finderの内部オプション(詳細はGoogle)をハッキングすることで恒久的に変更できます。または、単に単に[変更]> [フォルダへ移動]メニューオプションを使用して、名前で非表示のフォルダを直接開くこともできます。個人的には、 PathFinder というサードパーティのOSXシェルを使用しています。これは心からお勧めします(少額のライセンス料の価値があります)。他の多くの便利な機能の中で、隠しファイルを非表示/表示するメニューオプションが含まれています。

ドラッグの1つは、URLがApache/OSXを介して解決されるように、Windows VM hostsファイルが物理開発マシンを指すように一致するエントリを追加する必要があったことです。

192.168.1.5 client1.my-machine
192.168.1.5 client2.my-machine

(自動的に解決される)マシン名のみのエントリは必要ありませんが、それにサブドメインを追加すると、それらのホストエントリがないと正しく解決されません。これは時々私のMacのIPが(DHCPを介して)変更されることを吸い込みますが、それはささいな迷惑です。私はそれらのIPを必要としないように設定できると思いますが、それを理解できず、先に進む準備ができています:)(誰かが答えを知っている場合はコメントを残してください)

これで、複数のクライアントサイトが1つの場所で実行され、すべての開発/テスト環境からアクセスできるようになりました。これが他の誰かを助けることを願っています。

8
Brian Moeskau

私がお勧めするのはvhostsです。これにより、デフォルトのWebサーバーをいじることなく、ローカルで「エイリアンサイト」を提供できます。

  • localhost->スタートページなど
  • alien.localhost->クライアントサイト、任意のパス/ドキュメントルート。
  • x.localhost->別のサイト

Apachesグローバル設定ファイルまたは含まれているvhost.conf;

NameVirtualHost localhost:80
# the mysql tool's url
<VirtualHost phpmyadmin.localhost:80>
# and absolute path
DocumentRoot "/srv/www/phpMyAdmin/"
</VirtualHost>

#Same for the Client Site
<VirtualHost foo.localhost:80>
DocumentRoot "/path/to/desired/webroot/"
</VirtualHost>

最初に以下を指定することにより、許可を管理し、グローバルサイト全体を設定できます。

apacheのグローバルサーバー設定で

DocumentRoot "/srv/www/htdocs"
#
# Configure the DocumentRoot Properties
#
<Directory "/srv/www/htdocs"> 
    Options All
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    AllowOverride All
    # Controls who can get stuff from this server.
    Order allow,deny
    Allow from all
</Directory>
#
# Configure Sub-Domain Properties. This prevents those nasty 403 errors
#

# mysql administration tool
<Directory "/srv/www/phpMyAdmin/">
    Options Indexes MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

# a client web site built with CakePHP
<Directory "/home/eddie/workspace/Digital_Business/app/webroot/">
    Options All
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
6
Eddie

現在のプロセスでは、次のことができます

$ _SERVER ["document_root"] = "何でも";

注意してください。

2
Eli

これはサーバー固有の設定です。 Apacheを実行している場合は、httpd.confファイルを編集するだけです(Unixベースのシステムでは、ファイルは/etc/Apache2/httpd.confまたは/etc/httpd/httpd.confのいずれかになります。お使いのApacheのバージョン)。ファイルには次のような行があるはずです。

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/whatever/your/document/root/is"

技術的には、Eliの方法も同様に機能しますが、一般的に、サーバー変数を編集することは実際には良い考えではないと思います。

2
hbw

たぶん、あなたは次のサイトが役に立つと思うでしょう。これを設定するためにどの設定を操作すればよいかをわかりやすく説明するチュートリアルがあります。そこにはたくさん説明がありました。

タンガイのチュートリアル

0
Peter Perháč