Wampserver 403 на именованных виртуальных хостах вне/www
Wampserver сообщает мне, что доступ запрещен при попытке сделать виртуальный хост вне каталога c:/wamp/www/. Я могу сделать один из них в этом каталоге. Даже создание символической ссылки на папку работает, но я бы предпочел не использовать символические ссылки. Почему это не работает?
Вот код, который я использую в конце httpd.conf
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "c:/wamp/www"
ServerName localhost
ServerAlias localhost
</VirtualHost>
<VirtualHost *:80>
ServerName local.cascade
DocumentRoot c:/wamp/www/cascade/
</VirtualHost>
<VirtualHost *:80>
ServerName local.md9
ServerAlias local.md9
DocumentRoot "m:/Work/New MD9.ca/site/"
</VirtualHost>
<Directory "m:/Work/New MD9.ca/site/">
Order Allow,Deny
Allow from All
</Directory>
"Каскад" vh отлично работает.
Ответы
Ответ 1
Думаю, мне следовало бы более внимательно посмотреть на http.conf. Это не так долго, в основном комментарии. Это была неприятная часть.
# Deny access to the entirety of your server filesystem. You must
# explicitly permit access to web content directories in other
# <Directory> blocks below.
#
<Directory />
AllowOverride none
Require all denied
</Directory>
Я прокомментировал это, и теперь материал работает, хотя я думаю, что он менее безопасен, но это всего лишь тестовый сервер.
Я думал, что бит <Directory "m:/Work/New MD9.ca/site/">
должен был позаботиться об этом, но я не думаю.
Ответ 2
Я знаю, что вопрос старый, и у вас есть работа, но я столкнулся с этой проблемой и решил ее, не удаляя тег Require all denied
.
Вам просто нужно добавить тег Require local
(или Require all
для онлайн-доступа) в тег Directory. например.
<VirtualHost *:80>
ServerName local.md9
ServerAlias local.md9
DocumentRoot "m:/Work/New MD9.ca/site/"
<Directory "m:/Work/New MD9.ca/site/">
Order Allow,Deny
Allow from All
Require local
</Directory>
</VirtualHost>
Вы можете видеть то же правило, объявленное в каталоге DocumentRoot в httpd.conf
Ответ 3
У меня была такая же проблема, но мне удалось решить этот вопрос.
Однако принятый ответ может быть не лучшим решением, в зависимости от того, насколько безопасна ваша конфигурация Apache.
Я думаю, что решение должно упоминать две вещи: сначала обеспечение безопасности не скомпрометировано, а второе; понимая разницу в конфигурации контроля доступа между версиями Apache версий 2.2 и 2.4.
Обеспечение безопасности не скомпрометировано
Комментируя предложенные строки:
<Directory />
AllowOverride none
Require all denied
</Directory>
Позволяет удалить стандартную защиту по умолчанию, применяемую ко всем каталогам на вашей машине, насколько я понимаю. Кто-то еще может создать конфигурацию, указывающую на ваш каталог C:\very\sensitive\information
, и отсылать контент оттуда на веб-сайт (что, скорее всего, будет проблемой для общего хоста). Интересно, что над этим блоком сделан следующий комментарий:
# First, we configure the "default" to be a very restrictive set of
# features.
Затем под этим блоком:
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something not working as
# you might expect, make sure that you have specifically enabled it
# below.
Все имеет смысл блокировать все, затем условно разблокировать для каждого каталога.
Я придумал следующее, которое указывает на местоположение на моей машине, где будут жить все мои сайты (обслуживаемые через виртуальные хосты Apache). Это немедленно следует за блоком <Directory "d:/wamp/www/"></Directory>
.
<Directory "d:/wamp/sites/">
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
Затем в каждой из ваших конфигураций/псевдонимов виртуального хоста вы можете установить конфигурацию, которая применяется к этому каталогу.
Разница в конфигурации контроля доступа
Настройка управления доступом в более поздних версиях Apache изменилась.
Раньше:
Order allow,deny
Allow from all
Должно быть:
Require all granted
Для получения дополнительной информации: http://httpd.apache.org/docs/current/upgrading.html
Ответ 4
Тег <Directory>
должен находиться внутри <VirtualHost *:80>
вот так:
<VirtualHost *:80>
ServerName local.md9
ServerAlias local.md9
DocumentRoot "m:/Work/New MD9.ca/site/"
<Directory "m:/Work/New MD9.ca/site/">
Order Allow,Deny
Allow from All
</Directory>
</VirtualHost>
также обратите внимание, что для внешней папки по умолчанию www вы должны использовать require, а не разрешать
<Directory />
AllowOverride none
Require all denied
</Directory>
Ответ 5
Если вы выполнили все внесенные изменения .conf и не работали, попробуйте выполнить следующие дополнительные действия:
1) Убедитесь, что DocumentRoot и <Directory> location являются одинаковыми!
2) Двойная проверка орфографии доменного имени "ServerName" в тегах <VirtualHost> , а также проверка орфографии домена одинакова в файле HOST (windows\system32\drivers\etc\hosts):
Пример:
<VirtualHost *:80>
DocumentRoot "D:/vhost_directory/website_directory"
ServerName mywebsite.local
<Directory "D:/vhost_directory/website_directory">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
3) Проверьте синтаксис файлов conf:
cd \wamp\bin\apache\apache2.4.9\bin
httpd -t
4) Исправьте файлы conf, пока не получите результат:
Syntax OK
5) Обновить кеш имен доменов (необходимо запустить консоль как администратор):
net stop dnscache
net start dnscache
6) Перезапустите службу Apache или перезапустите все службы на WAMP