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 в папку, в которой сайт фактически существует.

Этот код работал для меня:

sudo chmod -R 755 /var/www/***

Убедитесь, что SELinux не блокирует доступ к вашему веб-каталогу:

chcon -R -u system_u -t httpd_sys_content_t /home/user/www
Другие вопросы по тегам