Я запускаю xampp, у которого есть Apache на Windows для сервера разработки. Мне нужно использовать поддомен localhost для доступа к моей папке localhost / images /, перейдя на h ## p: //images.localhost
Однако у меня возникли проблемы, я опубликовал изображение ниже, показывающее мою проблему.
Итак, вопрос в том, как настроить поддомен на Apache и заставить его работать для нужной мне папки?
Пожалуйста, просмотрите это изображение, извините, новые пользователи не могут опубликовать более 1 url и НИКАКИХ изображений, так что вот мой 1 url к важному изображению
http://www.freeimagehosting.net/uploads/b0194b8e68.jpg
ОБНОВЛЕННАЯ ВЕРСИЯ
My apache conf file
NameVirtualHost localhost:8080
<VirtualHost localhost:8080>
ServerName localhost
ServerAdmin blah@blah.com
DocumentRoot c:\server\htdocs
</VirtualHost>
<VirtualHost images.localhost:8080>
ServerName images.localhost
ServerAdmin blah@blah.com
DocumentRoot c:\server\htdocs\images
</VirtualHost>
My windows host file
127.0.0.1 images.localhost
127.0.0.1 *.localhost
Проблема, насколько я понимаю виртуальный хостинг Apache, в любом случае, заключается в том, что вы используете универсальную конфигурацию своих виртуальных хостов и используете общий DocumentRoot, а не явно определяете имя каждого VHost и DocumentRoot:
*: 8080 - это ваша базовая настройка NameVirtualHost.
Это перехватит все запросы к: 8080 и перенаправит все запросы на виртуальный хост, который соответствует директиве.
Это становится проблематичным, если у вас есть две директивы Vhost с одинаковыми именами, и одна из директив DocumentRoot совпадает с DocumentRoot сервера. Если нет «замещающего» DocumentRoot, который есть у сервера отдельно, то Apache будет оценивать DocumentRoot каждого виртуального хоста, находя «бритву Оккама» из значений, с которыми он сталкивается, если несколько виртуальных хостов имеют общий корневой путь.
В этом случае ... \ htdocs является DocumentRoot для обоих, потому что ... \ images содержится в пределах ... \ htdocs. Таким образом, любые запросы по умолчанию будут автоматически отправляться на Vhost, который предлагает только ... \ htdocs в качестве его DocumentRoot.
Я понимаю, что это немного сбивает с толку, поэтому, чтобы исправить это: переключитесь на виртуальный хостинг на основе имени.
ОБНОВЛЕНИЕ (2009-08-25)
Мне нужно кое-что уточнить, прежде чем мы продолжим:
Apache и другие веб-серверы никогда не слушают: по умолчанию 8080. Кроме того, веб-клиенты, такие как Firefox, по умолчанию никогда не запрашивают: 8080. Я предполагал, что вы поняли это из своего исходного сообщения, поскольку ваша директива VHost показала нестандартный порт: 8080. Я не уверен, что это было ясно.
Чтобы предыдущая редакция моего сообщения работала для вас в том виде, в каком она была настроена (без перенаправления порта 80 или чего-то еще), вам нужно будет указать порт при запросе страницы:
http: // локальный: 8080 и http: //images.localhost: 8080
Я должен был включить эту информацию. Как я уже сказал, я предположил, что это было ясно из вашего исходного сообщения. Мои извинения за это. Кроме того, я также предполагал, что вы настроили его таким образом, потому что другой сервер прослушивал порт 80. Если это правда, то вы можете рассмотреть возможность объединения двух серверов в одну установку или отключить альтернативный, пока вы работаете с xampp. .
Итак, давайте исправим директивы VHost для прослушивания порта 80, который является портом по умолчанию, с которого страницы обслуживаются и запрашиваются серверами и клиентами соответственно.
Я также собираюсь уделить особое внимание определению локализованных разрешений для папок, из которых вы обслуживаете данные, так как меня беспокоит, что существует директива /, которая ограничивает вашу способность получать страницы с ваших сайтов.
ОБНОВЛЕНО Директивы VirtualHost (25 августа 2009 г.):
NameVirtualHost localhost:80
<VirtualHost localhost:80>
ServerName localhost
# Naturally, this can be changed to a real email.
ServerAdmin blah@blah.com
# Set our DocRoot for the VHost.
DocumentRoot c:\xampp\htdocs
# Define access perms for our DocRoot.
<Directory "c:\xampp\htdocs">
# We're going to define Options, Override perms, and Allow directives.
# FollowSymLinks probably doesn't work in Windows, but we'll keep it for posterity.
Options Indexes MultiViews FollowSymLinks
# Disallow Override
AllowOverride None
# Setup 1. Allow only *from* localhost. Comment out the following 3 lines,
# and uncomment Setup 2 below to allow access from all.
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0
# Setup 2. Allow all. Uncomment the following 2 lines, and comment out Setup 1.
#Order allow,deny
#Allow from all
</Directory>
</VirtualHost>
<VirtualHost images.localhost:80>
ServerName images.localhost
# Naturally, this can be changed to a real email.
ServerAdmin blah@blah.com
# Set our DocRoot for the VHost.
DocumentRoot c:\xampp\htdocs\images
# Define access perms for our DocRoot.
<Directory "c:\xampp\htdocs\images">
# We're going to define Options, Override perms, and Allow directives.
# FollowSymLinks probably doesn't work in Windows, but we'll keep it for posterity.
Options Indexes MultiViews FollowSymLinks
# Disallow Override
AllowOverride None
# Setup 1. Allow access only from localhost. Comment out the following 3 lines,
# and uncomment Setup 2 below.
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0
# Setup 2. Allow all. Uncomment the following 2 lines, and comment out Setup 1.
#Order allow,deny
#Allow from all
</Directory>
</VirtualHost>
Apache будет сердиться на эту настройку, если нет соответствующего DNS-имени, которое он может найти для виртуального хоста, поэтому предыдущая рекомендация по изменению файла hosts системы остается верной. Обратите внимание, что при редактировании файла hosts вы можете поместить все псевдонимы для одного IP в одну строку, что избавит вас от некоторой путаницы.
127.0.0.1 localhost images.localhost
Вы также можете использовать Vhosting на основе IP, но я бы не рекомендовал это. Это намного сложнее, чем то, что вы делаете, и «действительно» необходимо только тогда, когда вы имеете дело с несколькими vHosts, использующими SSL.
В любом случае, описанная мною установка работает точно так, как ожидалось в моей системе (Ubuntu 8.10 x86_64, Apache 2.2.9), а также должна нормально работать в вашей.
Я предполагаю, что ваша проблема пытается сделать поддомен «localhost». Лучше всего было бы изменить имена серверов на что-то вроде «localdomain.com» и «images.localdomain.com» (на самом деле подойдет что угодно), а затем изменить файл хостов, чтобы сопоставить этот домен с 127.0.0.1.
Прошло некоторое время с тех пор, как я использовал окна (извините), но я считаю, что файл hosts находится в c: \ windows \ system32 \ etc \ hosts
А формат поддельного домена будет примерно таким:
localdomain.com 127.0.0.1
Затем вам просто нужно отскочить от вашего сервера XAMPP, и все должно быть в порядке.
Надеюсь, это поможет :)
Конфигурация мне нравится. Проверьте наличие простых проблем, таких как перезапуск apache после изменения файла конфигурации и т. Д.
Как описано в RFC 2606 .localhost. лечится спец.
Но еще одна вещь, на которую стоит обратить внимание: какой у вас каталог по умолчанию? Возможно, ваши виртуальные настройки не работают должным образом. Но вместо этого DocumentRoot самого сервера всегда обрабатывает запросы.
Проблема в том, что «localhost» всегда разрешается в 127.0.0.1, но поддомены localhost, такие как ваш «images.localhost», не определены и, следовательно, не разрешаются. Вы можете исправить это локально, отредактировав файл hosts вашей системы (обычно в c: \ windows \ system32 \ drivers \ etc) и добавив следующую строку:
127.0.0.1 images.localhost
Вы также можете добавить:
127.0.0.1 *.localhost
После сохранения файла hosts ваши поддомены должны правильно разрешиться.
Редактировать: Я вижу, что у вас настроены vhosts для прослушивания порта 8080, но ваши URL-адреса не включают номер порта. Вам нужно перейти к адресам, в которых есть: 8080, например:
http://images.localhost:8080/layout/homepage/welcome_image.jpg
Кроме того, вы можете изменить vhosts для прослушивания: 80.
Я предполагаю, что причина, по которой работает только localhost, заключается в том, что ваша основная конфигурация Apache Listen 127.0.0.1
и DocumentRoot c:\xampp\htdocs
.
Я даже попытался использовать настоящее доменное имя в моем файле hosts, и мой компьютер просто отключился, пытаясь его загрузить.
Возможно, у вас проблемы с разрешением имен. Вы можете попробовать выполнить команду ping images.localhost из командной строки (Пуск -> Выполнить -> «cmd»)
Если этот поддомен не работает, возможно, вы можете попробовать с настоящим. Моя последняя статья может помочь: 42foo: все виртуальные хосты, необходимые для вашей веб-разработки
У меня это работает с некоторыми доменами, хотя я связываю их все с одним и тем же корнем документа:
<VirtualHost *:80>
DocumentRoot /srv/apps/mydomain/current/public
ServerName mydomain.com
ServerAlias www.mydomain.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /srv/apps/mydomain/current/public
ServerName assets0.mydomain.com
ServerAlias assets1.mydomain.com
ServerAlias assets2.mydomain.com
ServerAlias assets3.mydomain.com
</VirtualHost>