Заставить XAMPP / Apache обслуживать файл вне htdocs [закрыто]


304

Можно ли настроить xampp для обслуживания файла вне htdocsкаталога?

Например, скажем, у меня есть файл, расположенный следующим образом:

C:\projects\transitCalculator\trunk\TransitCalculator.php

и мои файлы xampp обычно раздаются из:

C:\xampp\htdocs\

(потому что это конфигурация по умолчанию) Есть ли способ заставить Apache распознавать и обрабатывать мой TransitCalculator.phpфайл, не перемещая его под htdocs? Желательно, чтобы Apache обслуживал / имел доступ ко всему содержимому каталога проектов, и я не хочу перемещать каталог проектов в него htdocs.

edit: отредактировано, чтобы добавить Apache к заголовку вопроса, чтобы сделать Q / A более «доступным для поиска»


1
Думаю, теги должны быть достаточно доступны для поиска.
— Ледяной воды

24
Этот вопрос не должен был быть закрыт. Это вопрос XAMPP. Это вопрос разработчика.
— Андрей Копер

15
Эндрю Копер, я согласен, но неудивительно, что уровень жесткой неприязни, характерной для всей экосистемы обмена стеками, на данный момент. ¯_ (ツ) _ / ¯
— cmcculloh

Мабы не по теме, но просто хочу дать совет: иногда можно вместо этого переместить каталоги в вашу папку "htdocs", например. если вы хотели бы иметь возможность открывать файлы на Google Диске в localhost;) ( stackoverflow.com/questions/41751330/… )
— Гордова

2
Помимо всех ответов, я хотел бы добавить один. Начиная с версии PHP 5.4.0, вы можете перейти в корневой каталог проекта с помощью командной строки и выполнить php -S <host>:<port>. Например php -S localhost:80.
— radiantshaw

Ответы:


362

Хорошо, для ответов pix0r , Sparks и Dave, похоже, есть три способа сделать это:


Виртуальные Хосты

  1. Откройте C: \ xampp \ apache \ conf \ extra \ httpd-vhosts.conf.
  2. Отменить комментарий ~ строка 19 ( NameVirtualHost *:80).
  3. Добавьте ваш виртуальный хост (строка 36):

    <VirtualHost *:80>
        DocumentRoot C:\Projects\transitCalculator\trunk
        ServerName transitcalculator.localhost
        <Directory C:\Projects\transitCalculator\trunk>
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>
  4. Откройте файл hosts (C: \ Windows \ System32 \ drivers \ etc \ hosts).

  5. Добавить

    127.0.0.1 transitcalculator.localhost #transitCalculator

    в конец файла (перед Spybot - Search & Destroy, если он у вас установлен).

  6. Сохранить (возможно, вам придется сохранить его на рабочем столе, изменить разрешения для старого файла хостов (щелкните правой кнопкой мыши> свойства) и скопировать новый в каталог поверх старого (или переименовать старый), если вы используете Виста и есть проблемы).
  7. Перезапустите Apache.

Теперь вы можете получить доступ к этому каталогу, перейдя по адресу http: //transitcalculator.localhost/ .


Сделать псевдоним

  1. Начиная ~ строку 200 вашего http.confфайла, скопируйте все между <Directory "C:/xampp/htdocs">и </Directory>(~ строка 232) и вставьте его сразу ниже, C:/xampp/htdocsзаменив нужным каталогом (в данном случае C:/Projects), чтобы дать вашему серверу правильные разрешения для нового каталога.

  2. Найдите <IfModule alias_module></IfModule>раздел (строка 300) и добавьте

    Alias /transitCalculator "C:/Projects/transitCalculator/trunk"

    (или то, что имеет отношение к вашим желаниям) под Aliasблоком комментариев, внутри тегов модуля.


Изменить корневой документ

  1. Отредактируйте ~ строку 176 в C: \ xampp \ apache \ conf \ httpd.conf; изменить DocumentRoot "C:/xampp/htdocs"на #DocumentRoot "C:/Projects"(или все, что вы хотите).

  2. Измените ~ строку 203, чтобы она соответствовала вашему новому местоположению (в данном случае C:/Projects).


Ноты:

  • Вы должны использовать косую черту "/" вместо обратной косой черты "\".
  • Не включайте завершающий "/" в конце.
  • перезагрузите ваш сервер .

13
На шаге (3) отредактируйте C: \ Windows \ System32 \ drivers \ etc \ hosts. Лучше всего сначала запускать редактор (Блокнот, Блокнот ++ или любой другой редактор) в качестве Администратора. Таким образом, вы можете сохранить непосредственно в папку C: \ Windows \ System32 \ drivers \ etc \.
— CallMeLaNN

3
Если вы получили 403 ошибки, обратитесь по этой ссылке
— Wojtek Owczarczyk

21
Используя Order allow, deny Allow from all на Win7 возвращает 403 ERROR, потому что эта опция устарела. Использование Требуется все предоставлено. stackoverflow.com/questions/9110179/…
— Hywak

4
Просто к вашему сведению, этот шаг, по-моему, не был необходим для меня: Строка без комментариев 19 (NameVirtualHost *: 80)
— Silverback

2
Использование Order allow,deny Allow from allне работает для меня, но Require all grantedработает.
— Дэнни Беккет

96

Вы можете переместить его, отредактировав настройку DocumentRoot в XAMPP \ apache \ conf \ httpd.conf.

В настоящее время должно быть:

C: / XAMPP / HTDOCS

Измените это на:

C: / проекты / transitCalculator / багажник


40
Не забудьте отредактировать его в ОБОИХ строках, которые запрашивают DocumentRoot. Если вы измените только верхний, вы получите ошибки доступа для чтения и т. Д.
— Arcolye

2
это относится и к XAMP Mac?
— сердитый киви

Теперь по какому URL можно получить доступ к странице индекса?
— Маниш Кумар

49

VirtualHost также будет работать для этого и может работать лучше для вас, так как вы можете разместить несколько проектов без необходимости в подкаталогах. Вот как вы это делаете:

httpd.conf (или дополнительный \ httpd-vhosts.conf относительно httpd.conf. Конечные косые черты "\" могут привести к тому, что он не будет работать):

NameVirtualHost *:80
# ...
<VirtualHost *:80>  
    DocumentRoot C:\projects\transitCalculator\trunk\
    ServerName transitcalculator.localhost
    <Directory C:\projects\transitCalculator\trunk\>  
        Order allow,deny  
        Allow from all  
    </Directory>
</VirtualHost> 

Файл HOSTS (обычно c: \ windows \ system32 \ drivers \ etc \ hosts):

# localhost entries
127.0.0.1 localhost transitcalculator.localhost

Теперь перезапустите XAMPP, и вы сможете получить доступ к http: //transitcalculator.localhost/, и он отобразится прямо в этот каталог.

Это может быть полезно, если вы пытаетесь воспроизвести производственную среду, в которой вы разрабатываете сайт, который будет находиться в корне доменного имени. Например, вы можете указать файлы с абсолютными путями, которые будут перенесены на сервер:

<img src="/images/logo.png" alt="My Logo" />

тогда как в среде, использующей псевдонимы или подкаталоги, вам необходимо отслеживать, где именно каталог «images» был относительно текущего файла.


У меня есть несколько сетевых дисков на моем ПК, которые были сопоставлены буквам дисков (например X:\myfolder). Когда я использую этот метод, я получаю предупреждение «Доступ запрещен». Означает ли это, что пользователь Apache не имеет доступа для чтения к диску?
— Гарриг

1
Под Directoryзамену Order allow,denyи Allow from allс Require all granted. См. Stackoverflow.com/questions/9110179/…
— Michiel

16

Вы можете настроить Apache для обслуживания страниц из любого места с любыми ограничениями, но обычно он распространяется в более безопасной форме.

Редактирование файлов apache (http.conf - одно из наиболее распространенных имен) позволит вам настроить любую папку так, чтобы она появлялась в вашем webroot.

РЕДАКТИРОВАТЬ:

псевдоним myapp c: \ myapp \

Я отредактировал свой ответ, включив в него формат для создания псевдонима в файле http.conf, который похож на ярлык в windows или символическую ссылку под un * x, где Apache «притворяется», что папка находится в webroot. Это, вероятно, будет более полезным для вас в долгосрочной перспективе.


10

Если вы пытаетесь заставить XAMPP использовать сетевой диск в качестве корневого каталога документа, вы должны использовать UNC-пути в httpd.conf. XAMPP не распознает ваши подключенные сетевые диски.

Например, следующее не будет работать, DocumentRoot "X: / webroot"

Но это произойдет, DocumentRoot "//192.168.10.100/webroot" (обратите внимание на прямую, а не обратную косую черту)


Он отлично работает с моим подключенным сетевым диском.
— Шон Кендл

7

Решение, позволяющее Apache 2 размещать сайты за пределами htdocs:

Под директивой DocumentRoot в httpd.conf вы должны увидеть блок каталога. Замените этот блок каталогов:

<Directory />
    Options FollowSymLinks
    AllowOverride All
    Allow from all
</Directory> 

ПОМНИТЕ, ЧТОБЫ НЕ ИСПОЛЬЗОВАТЬ ЭТУ КОНФИГУРАЦИЮ В РЕАЛЬНОЙ СРЕДЕ


Работает только для файловых систем, поддерживающих symlincs. Нет объяснения, почему эту опцию не следует использовать.
— Дунайский моряк
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.