Benim yerel PHP dev kurulumunda DOCUMENT_ROOT ve site kök nasıl ayarlanır?

5 Cevap php

Ben çevrimiçi bir site ile bir adam için bir iş yapıyorum. Bu benim için bir yabancı site ve ben yavaş yavaş garip kodu ile çalışıyorum. Ben yerel mAmp var ve benim http://localhost/ birçok istemci klasörler o kopan gelmiştir. Bu kod içinde sadece benim yerel PHP dev alanda kaybolmadan hangi gibi $ _SERVER ['document_root'] komutları ve referanslar bir çok şey var.

Nasıl kolayca onları tekrar yüklemek gerekir ve canlı site kırmak istemiyorum (sadece yerel olsa da, gerçekten, site dosyaları ile karışıklık istemiyorum ne olması gerektiği document_root başvuru oluşturun! Ve yapabilirsiniz PHP sitenin kök böylece görüntünün src referanslar bu site için "/ images / ..." düzgün gösterecektir ... Benim yerel PHP dev URL olduğunu düşünüyor dolaylı ortamda bir yolu daha vardır: {[(0 )]} ... ama kodu '/' / images / ... '{başvuran başında [(1)]}?

Teşekkür ederim.

5 Cevap

Varsayılan web sunucusu ile karışıklık olmadan yerel olarak "yabancı site" hizmet böylece Ne tavsiye ederim vhosts olduğunu.

  • localhost -> başlangıç ​​sayfanızı ya da ne olursa olsun
  • alien.localhost -> müşterilerine saha, ne olursa olsun yol / doc kök istediğiniz.
  • x.localhost -> başka bir site

In apaches global config file or included 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>

Siz dosya erişim kontrolü ve ilk altındaki belirterek bir genel küresel sitesi ayarlayabilirsiniz

in apache's global server config

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>

@Eddie's answer bana çok yardımcı oldu, ama ben hala kendimi OSX üzerinde XAMPP kullanarak aynı sorunu çözmek için küçük bir ekstra araştırma yapmak zorunda. Ben kuşaklar yararına burada tam bir çözüm eklemek düşündüm.

Önce (XAMPP "etc / extra /" klasörü altında) httpd-vhosts.conf için aşağıdaki girdileri ekledi:

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>

Özellikle yerine VirtualHostuna URL'ler için "localhost" bir joker kullanılabilir ve ben her subdomain adını belirtilen ServerName yapılandırması eklendi unutmayın. Not Ayrıca ben yerine "localhost" benim makinenin adını ("my-makine") kullanılan - (sadece localhost değil) herhangi bir makineden gelen tüm istekleri düzgün değerlendirilebilir bu şekilde. Ben OSX gelişebilir ancak çeşitli VM paralellikler vasıtasıyla test tarayıcılar. Benim ağ üzerindeki herhangi bir makine veya VM http://client1.my-machine erişebilir bu yaklaşımı kullanarak. "Localhost" Belirtilen ile sadece benim geliştirme makinede çalışacak.

Ve istekleri özel sitelerinden biri varsayılan kalmamak gerekir NOTE: (http://httpd.apache.org/docs/2.2/vhosts/name-based.html burada açıklandığı gibi) ilk VirtualHost girişi varsayılan olarak kullanılır.

@Eddie's answer görüldüğü gibi ben de httpd.conf için izinleri ayarları eklendi. Bu her zaman gereklidir, ama ben bu değişikliği yapmak için gerekli olan 2 ayrı vakada koştu değildir:

  • (Temelde http üzerinden erişilebilir olacak herhangi bir yol açık izinler ayarlanmış olması gerekir), varsayılan XAMPP http kök dışında bir dizinde yeni bir site oturtmakta
  • (Varsayılan http yolun altında) bir sanal konak olarak kurulmuş bir site için mod_rewrite kuralları ekleme, ben hata alıyorum "htaccess:. YenidenYazmaMotoru burada izin verilmiyor". AllowOverride seçeneği hakkında httpd.conf yorum okuma hatasının nedeni bariz yapar, ama ben daha önce gözden vardı. "All" için bu değişen hata düzeltildi.

Düzenleme esnasında httpd.conf, sen (varsayılan olarak benim için yorumladı), ya da yukarıda yapılan vhosts değişiklik etkilemez almayacağız aşağıdaki satırı yorumsuz gerekebilir unutmayın:

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

Son olarak, ben de yukarıdaki açıklamalarda belirtildiği gibi benim hosts dosyasına özel alan adları eklemek zorunda kaldılar. OSX üzerinde, "/ özel / etc / hosts" (Windows bu "Windows/System32/drivers/etc/hosts" olurdu) ve aşağıdaki satırları ekledi düzenleyerek bunu:

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

NOTE: Varsayılan OSX Finder UI, (özel / dahil) gizli klasörleri görünür değildir. Sen iç Finder seçenekleri (ayrıntılar için Google) hack kalıcı değiştirebilirsiniz, ya da daha basitçe bir arada değişiklik yapmak için, sadece doğrudan adı gizli klasörleri açmak sağlayacak "klasörüne gidin> git" menü seçeneğini kullanabilirsiniz. Şahsen ben yürekten (o küçük lisans ücreti değer) tavsiye ederim PathFinder adında bir üçüncü taraf OSX kabuğunu kullanın. Bu diğer birçok kullanışlı özellikleri arasında / gösteri gizli dosyaları gizlemek için bir menü seçeneği içerir.

Bir sürükleme One şey adresler Apache / OSX yoluyla çözmek olacağını bu yüzden de benim fiziksel dev makine işaret benim, Windows VM hosts dosyasına eşleşen girdileri eklemek zorunda mı olduğunu:

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

Ben yalnız makine adı için bir giriş (otomatik olarak giderir) gerek yok ama buna subdomain ekleme bu konak girişleri olmaksızın çözmek doğru değildir. Bu vesileyle o emmek benim Mac IP değişirse (DHCP ile), ancak küçük bir sıkıntı var. Yok (Birisi cevabını bilen varsa lütfen yorum bırakın :)) Ben bu IP bulunuyor gerekmez bunu kurmak olabilir zannedebilir, ama ben bunu anlamaya ve hareket etmeye hazır değilim ki

Şimdi birden çok istemci siteleri tek bir yerde çalışan ve benim dev / test ortamlarında tüm erişilebilir var. Bu başkası yardımcı olur umarım.

Bu bir sunucu özel ayar bulunuyor. Apache çalıştırıyorsanız, yapmanız gerekir tüm (Unix-tabanlı bir sistemde, bu /etc/apache2/httpd.conf veya {[(2 ya da olması gerekir sizin httpd.conf dosyasını düzenlemek olduğunu )]}, hangi sahip Apache sürümü) bağlı. Bu gibi görünüyor dosyasındaki bir satır olmalıdır:

#
# 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"

Teknik olarak, Eli'nin yolu olarak iyi çalışır, ancak sunucu değişkenleri düzenleme genel olarak, gerçekten iyi bir fikir olduğunu sanmıyorum.

Mevcut süreç için, sadece yapabilirsiniz

$ _SERVER ["Document_root"] = "ne olursa olsun";

Ancak dikkatli olun.

Belki aşağıdaki site yararlı bulur. Ayarlar size memnuniyetini This'n'That kurmak işlemek için sadece ne size göstermek basit-takip dersler vardır. Ben bir sürü açıkladı bulundu.

Tanguay's tutorial