Как установить DOCUMENT_ROOT и корень сайта в моей локальной установке PHP?

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

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

Спасибо.

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

  • 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> 

@ Ответ Эдди мне очень помог, но мне пришлось по-прежнему проводить дополнительные исследования, чтобы решить ту же проблему для себя, используя 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, где я указал каждое имя поддомена. Также обратите внимание, что я использовал имя моей машины («моя машина») вместо «localhost» – таким образом, все запросы с любой машины (а не только на localhost) могут быть правильно оценены. Я разрабатываю в OSX, но тестирую браузеры в разных виртуальных машинах через Parallels. Используя этот подход, я могу получить доступ к http: //client1.my-machine с любого компьютера или виртуальной машины в моей сети. С указанным «localhost» он будет работать только на моей машине разработки.

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

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

  • Основываясь на новом сайте в каталоге за пределами стандартного XAMPP http root (в основном любой путь, который будет доступен через HTTP, должен иметь установленные явные разрешения)
  • Добавление правил mod_rewrite для сайта, настроенного как виртуальный хост (по пути http по умолчанию), я получал ошибку «.htaccess: RewriteEngine здесь не разрешено». Чтение комментариев в httpd.conf о параметре AllowOverride делает причиной ошибки очевидной, но я AllowOverride об этом раньше. Изменение этого параметра на «Все» зафиксировало ошибку.

Обратите внимание, что при редактировании httpd.conf вам может потребоваться раскомментировать следующую строку (по умолчанию она была прокомментирована для меня), или изменение vhosts, сделанное выше, не вступит в силу:

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

Наконец, мне также пришлось добавить пользовательские имена доменов в файл моих хостов, как указано в комментариях выше. В 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 по умолчанию скрытые папки (включая / частные) не отображаются. Вы можете изменить это навсегда, взломав внутренние параметры Finder (Google для получения дополнительной информации) или, проще говоря, сделать случайные изменения, просто используйте пункт меню «Go> Go to folder», который позволит вам открывать скрытые папки напрямую по имени. Лично я использую стороннюю оболочку 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-адресах, но я не мог понять это и готов двигаться дальше 🙂 (Если кто-то знает ответ, оставьте комментарий)

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

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

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

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

$ _SERVER ["document_root"] = "whatever";

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

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

Учебник Tanguay