Как установить DOCUMENT_ROOT и корень сайта в моей локальной настройке PHP dev? - PullRequest
13 голосов
/ 26 апреля 2009

Я делаю работу для парня с сайтом онлайн. Для меня это сайт пришельцев, и я медленно прорабатываю странный код. У меня есть MAMP локально, и у моего http://localhost/ есть много папок клиента, исходящих из этого. Внутри этого кода есть много команд $ _SERVER ['document_root'] и ссылок, таких как image, которые просто теряются в моей локальной области разработки PHP.

Как я могу легко установить ссылку на document_root на то, что она должна быть (хотя локально, не очень хочу связываться с файлами сайта, так как мне нужно будет загружать их снова и не хочу прерывать работу site! И есть ли способ косвенной настройки, при котором PHP считает, что корень сайта таков, что ссылки src изображения "/ images / ..." будут отображаться правильно ... Мой локальный URL-адрес PHP для этого сайта: http://localhost:8888/_CLIENTS/clientsite/www/ ... но в коде символ '/' в начале '/ images / ...' ссылается на http://localhost:8888/ ??

Спасибо.

Ответы [ 5 ]

8 голосов
/ 09 июля 2009

@ ответ Эдди мне очень помог, но мне все же пришлось провести небольшое дополнительное исследование, чтобы решить эту проблему для себя, используя XAMPP на OSX. Я думал, что добавлю свое полное решение здесь для блага потомков.

Сначала я добавил следующие записи в httpd-vhosts.conf (в папке "etc / extra /" в XAMPP):

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>

Обратите внимание, что я специально использовал подстановочный знак вместо "localhost" для URL-адресов VirtualHost и добавил конфигурацию ServerName, в которой я указал каждое имя субдомена. Также обратите внимание, что я использовал имя моей машины («my-machine») вместо «localhost» - таким образом все запросы от любой машины (не только localhost) могут быть правильно оценены. Я работаю в OSX, но тестирую браузеры на разных виртуальных машинах через Parallels. Используя этот подход, я могу получить доступ к http://client1.my -машина с любой машины или виртуальной машины в моей сети. Если указано «localhost», оно будет работать только на моей машине для разработки.

ПРИМЕЧАНИЕ : первая запись VirtualHost используется по умолчанию (как объяснено здесь: http://httpd.apache.org/docs/2.2/vhosts/name-based.html) и требуется, чтобы запросы по умолчанию не относились к одному из пользовательских сайтов.

Я также добавил настройки разрешений в httpd.conf, как показано в @ Eddie's answer . Это не всегда требуется, но я столкнулся с двумя отдельными случаями, когда мне нужно было внести это изменение:

  • Размещение нового сайта в каталоге за пределами корневого каталога XAMPP по умолчанию (в основном для любого пути, который будет доступен через http, должны быть установлены явные разрешения)
  • При добавлении правил mod_rewrite для сайта, настроенного в качестве виртуального хоста (по пути http по умолчанию), я получил сообщение об ошибке «.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 по умолчанию скрытые папки (включая / private) не отображаются. Вы можете изменить это навсегда, взломав внутренние параметры Finder (Google для деталей), или, проще говоря, сделать случайные изменения, просто используйте пункт меню «Перейти> Перейти к папке», который позволит вам открывать скрытые папки непосредственно по имени. Лично я использую стороннюю оболочку OSX под названием PathFinder , которую я бы искренне рекомендовал (это стоит небольшой платы за лицензию). Он включает в себя пункт меню, чтобы скрыть / показать скрытые файлы, среди многих других полезных функций.

Одной вещью, которая перетаскивает, является то, что я также должен был добавить соответствующие записи в моем файле хостов Windows VM, указывающие на мою физическую машину разработчика, чтобы URL-адреса разрешались через Apache / OSX:

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

Мне не нужна запись только для имени машины (которая разрешается автоматически), но добавление к ней субдомена не разрешается правильно без этих записей хоста. Иногда случается так, что IP-адреса моего Mac (через DHCP) меняются, но это небольшая неприятность. Я бы предположил, что я мог бы настроить его так, чтобы он не нуждался в этих IP, но я не мог понять это и готов двигаться дальше :) (Если кто-то знает ответ, пожалуйста, оставьте комментарий)

Теперь у меня есть несколько клиентских сайтов, работающих в одном месте и доступных из всех моих сред разработки / тестирования. Надеюсь, это поможет кому-то еще.

6 голосов
/ 26 апреля 2009

Я бы порекомендовал vhosts, чтобы вы могли обслуживать «чужой сайт» локально, не связываясь с вашим веб-сервером по умолчанию.

  • 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>
2 голосов
/ 26 апреля 2009

Это специфичная для сервера настройка. Если вы используете 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"

Технически, способ Элая тоже работает, но я не думаю, что редактирование серверных переменных - это вообще хорошая идея.

1 голос
/ 26 апреля 2009

Для текущего процесса вы можете просто сделать

$ _ SERVER ["document_root"] = "что угодно";

Будьте осторожны, хотя.

0 голосов
/ 26 апреля 2009

Может быть, вы найдете следующий сайт полезным. Существуют простые учебные пособия, которые показывают вам, какими настройками нужно манипулировать, чтобы настроить это и удовлетворить вас. Я нашел много объяснил там.

Учебное пособие Тангуая

...