Заставить XAMPP / Apache обслуживать файл вне htdocs

252

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

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

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

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

C:\xampp\htdocs\

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

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

  • 1
    Думаю, теги должны быть достаточно доступны для поиска.
  • 21
    Этот вопрос не должен был быть закрыт. Это вопрос XAMPP. Это вопрос разработчика.
Показать ещё 5 комментариев
Теги:
xampp

6 ответов

326
Лучший ответ

Хорошо, за pix0r, Искры и Dave отвечает, что есть три способа сделать это:


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

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

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

  • Добавить

    127.0.0.1 transitcalculator.localhost #transitCalculator
    

    до конца файла (до использования Spybot - Search and Destroy, если у вас установлено это).

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

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


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

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

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

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

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


Изменить корень вашего документа

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

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


Примечания:

  • Вам нужно использовать косые черты "/" вместо обратных косых черт "\".
  • Не включать конечный "/" в конце.
  • перезагрузите сервер.
  • 12
    На шаге (3) отредактируйте C: \ Windows \ System32 \ drivers \ etc \ hosts. Лучше всего сначала запускать редактор (Блокнот, Блокнот ++ или любой другой редактор) в качестве Администратора. Таким образом, вы можете сохранить непосредственно в папку C: \ Windows \ System32 \ drivers \ etc \.
  • 1
    Это должно быть ответом. Выбранный перемещает весь Apache для обслуживания в другую папку.
Показать ещё 11 комментариев
94

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

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

C:/XAMPP/HTDOCS

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

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

  • 39
    Не забудьте отредактировать его в ОБАХ строках, которые запрашивают DocumentRoot. Если вы измените только верхний, вы получите ошибки доступа для чтения и т. Д.
  • 2
    это относится и к XAMP Mac?
Показать ещё 1 комментарий
49

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

httpd.conf(или extra\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" относился к текущему файлу.

  • 0
    У меня есть несколько сетевых дисков на моем компьютере, которые были сопоставлены буквам дисков (например, X:\myfolder ). Когда я использую этот метод, я получаю предупреждение «Доступ запрещен». Означает ли это, что пользователь Apache не имеет доступа для чтения к диску?
  • 1
    В Directory заменить Order allow,deny и Allow from all с Require all granted . См. Stackoverflow.com/questions/9110179/…
15

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

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

EDIT:

alias myapp c:\myapp\

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

8

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

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

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

  • 0
    Он отлично работает с моим подключенным сетевым диском.
4

Ни одно из этих решений не работало легко. Вот простейшее решение, позволяющее Apache 2 размещать веб-сайты вне htdocs:

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

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

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

  • 0
    Работает только для файловых систем, поддерживающих symlincs. Нет объяснения, почему эту опцию не следует использовать.
Сообщество Overcoder
Наверх
Меню