Заставить 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.