AllowOverride все причины ошибка 403
Недавно я создал виртуальный хост с WampServer (версия 2.4), чтобы я мог получить доступ к своему локальному веб-сайту с помощью URL http://yannbergonzat.local/:
<VirtualHost *>
ServerName yannbergonzat.local
DocumentRoot "F:\Projets\Web\yann"
DirectoryIndex index.php
</VirtualHost>
А вот тег Directory из httpd.conf:
<Directory />
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
Этот сайт создан с использованием Symfony2, поэтому yannbergonzat.local ведет в папку. Если вы хотите получить доступ к фактическому веб-сайту, вам нужно перейти на yannbergonzat.local/web/app.php .
Я создал файл.htaccess, чтобы сайт можно было увидеть с помощью yannbergonzat.local:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ web/$1 [QSA,L]
</IfModule>
И сейчас проблема. В зависимости от значения AllowOverride возможны ошибки.
Когда AllowOverride установлен на "все"
Файл.htaccess читается, доступ к сайту можно получить по адресу yannbergonzat.local, но недоступны ресурсы (таблицы стилей, javascripts), находящиеся в другой папке (ошибка 403).
Когда AllowOverride установлен на "нет"
Файл.htaccess не читается, сайт не может быть доступен по адресу yannbergonzat.local (он показывает содержимое папки), вы должны написать весь URL (yannbergonzat.local/web/app.php), но ресурсы (таблицы стилей, javascripts), которые находятся в другой папке, могут быть доступны.
Что я должен сделать, чтобы сайт yannbergonzat.local с ресурсами из других папок работал нормально?
3 ответа
Это изменение в httpd.conf
ОЧЕНЬ ОПАСНО
<Directory />
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
так как он разрешает весь доступ ко всему диску, на который вы установили WampServer( Apache), если это диск C:\, вы делаете жизнь хакеров очень легкой!
Вы должны изменить httpd.conf, что обратно на
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
И добавьте спецификацию каталога в ваше определение VHOST следующим образом
<VirtualHost *:80>
ServerName yannbergonzat.local
DocumentRoot "F:\Projets\Web\yann"
DirectoryIndex index.php
<Directory "F:\Projets\Web\yann">
Options Indexes FollowSymLinks
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
AllowOverride none
это инструкция для Apache, чтобы игнорировать любые .htaccess
файлы, так что это объясняет, что вы описали.
При настройке сайта Symfony2 это рекомендуемая конфигурация для настройки виртуального хоста. Вы указываете /web
папка как DocumentRoot
Смотрите документацию
Поэтому я предполагаю (вы не указываете фактическую структуру папок), вам нужно что-то вроде этого:
<VirtualHost *:80>
ServerName yannbergonzat.local
DocumentRoot "F:/Projets/Web/yann/web"
DirectoryIndex index.php
<Directory "F:/Projets/Web/yann/web">
# enable the .htaccess rewrites
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Это почти наверняка исправит вашу ошибку 403, поскольку вы сейчас предоставляете доступ Require all granted
в папку, в которой сайт фактически существует.
Убедитесь, что SELinux не блокирует доступ к вашему веб-каталогу:
chcon -R -u system_u -t httpd_sys_content_t /home/user/www