Подтвердить что ты не робот

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 отлично работает.

4b9b3361

Ответ 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