14

私はオンラインのサイトを持っている人のために仕事をしています。それは私にとって異質なサイトであり、私はゆっくりと奇妙なコードに取り組んでいます. 私はローカルに 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/を参照しています??

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

4

5 に答える 5

8

@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でブラウザをテストしています。このアプローチを使用すると、ネットワーク上の任意のマシンまたはVMからhttp://client1.my-machineにアクセスできます。「localhost」を指定すると、開発マシンでのみ機能します。

:最初のVirtualHostエントリはデフォルトとして使用され(ここで説明されているように:http://httpd.apache.org/docs/2.2/vhosts/name-based.html)、リクエストがデフォルトで次のいずれかにならないようにするために必要です。カスタムサイト。

@Eddieの回答に示されているように、アクセス許可の設定もhttpd.confに追加しました。これは必ずしも必要ではありませんが、この変更を行う必要がある2つの別々のケースに遭遇しました。

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

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を介して解決されるように、物理開発マシンを指す一致するエントリをWindowsVMホストファイルに追加する必要があったことです。

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

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

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

于 2009-07-09T15:12:59.287 に答える
6

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

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

Apache のグローバル設定ファイルまたは含まれている 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>
于 2009-04-25T23:03:57.060 に答える
2

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

$_SERVER["document_root"] = "なんでも";

ただし、注意してください。

于 2009-04-25T22:15:32.823 に答える
2

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

#
# 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 の方法も同様に機能しますが、一般的に、サーバー変数を編集することは本当に良い考えではないと思います。

于 2009-04-25T22:23:35.923 に答える
0

以下のサイトが参考になるかもしれません。This'n'that を満足のいくようにセットアップするためにどの設定を操作すればよいかを示す、わかりやすいチュートリアルがあります。私はそこに多くの説明を見つけました。

Tanguay のチュートリアル

于 2009-04-25T22:18:30.727 に答える