Как установить корневой каталог в подпапку (локальная среда разработки php)

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

У меня был php-сайт на виртуальном хостинге в течение некоторого времени. Я редактировал локальные файлы и загружал их, а затем обновлял, чтобы убедиться, что все работает. Непослушный обычай, который я знаю!

Поэтому я попытался настроить локальную среду разработки и установить AMPPS для локального веб-сервера (PHP5). Я амбициозно настроил структуру папок ниже, чтобы я мог кодировать ряд веб-сайтов, чтобы опробовать разные языки и фреймворки, сохраняя их все отдельно. (Квадратные скобки обозначают папки). Убедитесь, что это правильный подход... (?)

-->[PHP]
---> [AMPPS]
----> [www]
-----> [PROJECTS]

------> [project_name]
-------> index.php
-------> .htaccess
-------> [images]
-------> [section1]
--------> page1.php
-------> [etc...]

------> [project_name]
------> [project_name]
--> [RUBY]
--> [PYTHON]

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

Ссылки (например, <a href="/section1/page1.php">Page 1</a>) теперь отображаются как: "localhost/section1/page1.php", когда я считаю, что на самом деле они должны отображаться как "localhost/PROJECTS/project_name/section1/page1.php".

Я не думаю, что говорить APACHE, что мой корневой каталог — [имя_проекта], — правильный подход, потому что тогда он не будет работать для других проектов, которые я создаю. Я предполагаю, что я должен делать что-то для каждого проекта, чтобы указать свой собственный корневой каталог.

Я думал, что смогу указать корень, добавив файл .htaccess в папку project_name:

Из моего онлайн-исследования я подумал, что это будет выглядеть примерно так:

RewriteEngine on
RewriteRule ^/$ /PROJECTS/project_name/

или, возможно,

RewriteEngine on
RewriteRule ^/$ .;C/PHP/AMPSS/www/PROJECTS/project_name/

Однако я не могу заставить их работать.

Когда сайт был в сети, я также закодировал <?php set_include_path($_SERVER['DOCUMENT_ROOT']); //Look for includes starting from ROOT location ?> вверху каждой страницы, думая, что поступаю правильно. Теперь я не настолько уверен, что правильно понял, что я там делал. Кажется, это не имеет никакого влияния с ним или без него в моей среде разработки. И я не смог каким-либо образом отредактировать его, чтобы решить проблему с относительными ссылками.

Простите за длинный пост.

Я благодарен за любую обратную связь/помощь. Заранее спасибо :)

[Решено] - приведенный ниже совет был идеальным. Спасибо вам всем. :)

Совет для пользователей Chrome: если вы используете персональный домен, как я сделал с .dev, либо продолжайте адрес с http://, либо заканчивайте его конечным /. Например, теперь я посещаю свой сайт разработки в Chrome, посетив имя проекта.dev/ (без последнего / он пытается выполнить поиск).

Сначала я подумал, что неправильно настроил VirtualHost или хосты, хотя на самом деле именно это поведение Chrome затуманивало проблему. На момент написания этой статьи другие браузеры, такие как Firefox, не разделяли эту озабоченность. Надеюсь, это поможет кому-то другому.


person ConcreteKiwi    schedule 10.12.2011    source источник
comment
Вы, вероятно, ищете вместо этого настройку нескольких имен виртуальных хостов. (См. /etc/hosts и <VirtualHostName>)   -  person mario    schedule 10.12.2011
comment
возможный дубликат Настроить Apache для локальной разработки/тестирования?   -  person mario    schedule 10.12.2011


Ответы (2)


Вы правы в том, что настройка Apache для каждого проекта — это путь вперед. Лучше всего это сделать с помощью виртуальных хостов. Определите виртуальный хост для каждого проекта и дайте ему доменное имя или субдомен для разработки. В моем случае я использую test.com для всей своей локальной разработки и настраиваю project1.test.com, project2.test.com и т. д., поэтому все мои относительные пути работают должным образом. Для этого я также редактирую свой файл hosts, чтобы поиск DNS для test.com и подпроектов разрешался в моем локальном машина.

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

надеюсь, это поможет

person Tak    schedule 10.12.2011
comment
Спасибо всем за вашу информацию. В частности, Tak & Mario, поскольку я пошел с рекомендацией VirtualHost. Никогда не слышал об этом раньше, но это звучит именно так, как мне нужно. После того, как Chrome отправил мою ссылку test.dev для поиска, а не через хосты, как я предполагал, я добился определенного успеха в Firefox. Однако наличие более одного списка VirtualHost в httpd.conf приводит к тому, что по умолчанию используется первый. И AMPSS, похоже, это не нравится, и он не позволит Apache запуститься, пока я не восстановлю файл по умолчанию. Я уверен, что смогу разгладить морщины. Еще раз спасибо за большую помощь :) - person ConcreteKiwi; 10.12.2011
comment
Не забывайте директиву NameVirtualHost *:80 при настройке виртуальных хостов. В некоторых стеках (например, XAMPP) это прокомментировано. Включите его. - person nevvermind; 10.12.2011
comment
Спасибо, новичок! Я также сделал ошибку, используя \ вместо / в именах файлов пути. Теперь все работает отлично. :) (я также обновил основной вопрос с подсказкой для Chrome) - person ConcreteKiwi; 11.12.2011

Я рекомендую использовать метод, упомянутый @Tak, но я знаю, что могут возникнуть проблемы с предварительно настроенными пакетами WAMP для добавления виртуальных хостов, поэтому есть также решение для использования BASE в разделе заголовка вашего html:

<base href="http://localhost/PROJECTS/project_name/">
person dev-null-dweller    schedule 10.12.2011