Общая папка Laravel доступна на сервере LAMP

Мне очень нужна помощь в настройке моего проекта laravel на сервере LAMP. До сих пор я без проблем тестировал свои «красивые URL-адреса» на своем локальном сервере xampp. Теперь, когда я пытаюсь настроить его на реальном сервере LAMP, у меня возникают проблемы.

До сих пор я установил службы LAMP (Ubuntu, Apache2, MYSQL, PHP5 (с curl и mcrypt)). В настоящее время у меня есть проект laravel в моем домашнем каталоге с символической ссылкой на общую папку в моей папке /var/www/html, например... проект, символическая ссылка.

Я изменил свой /etc/apache2/apache2.conf со следующей конфигурацией

<Directory />
       Options FollowSymLinks
       AllowOverride None
       Require all denied
</Directory>

<Directory /usr/share>
       AllowOverride None
       Require all granted
</Directory>

<Directory /var/www/html>
      Options Indexes FollowSymLinks
      AllowOverride All
      Require all granted
</Directory>

Затем я использовал команду sudo a2enmod rewrite и отредактировал файл .htaccess в соответствии с инструкциями в документации laravel.

Наконец, я перезапустил службу apache: sudo service apache2 restart, и когда я пытаюсь перейти на «mydomain.com/public», я получаю запрещенную ошибку 403.

Есть ли кто-нибудь, кто может мне помочь?


person neh11    schedule 08.06.2015    source источник
comment
Вы не получите доступ к /public в своем браузере, только /.   -  person Stuart Wagner    schedule 08.06.2015
comment
Я сделал ошибку при наборе поста... Я изменил свой файл /etc/apache2/apache2.conf, чтобы он выглядел так puu.sh/igEnN/22069d76b6.png.   -  person neh11    schedule 08.06.2015
comment
@StuartWagner Корень моего документа — /var/www/html, это не значит, что я должен включить /public. В любом случае это все еще не работает, когда я пытаюсь получить доступ к своим URL-адресам из route.php, я получаю, что ресурс не найден   -  person neh11    schedule 08.06.2015
comment
Вы должны указать свой DocumentRoot на папку public, потому что там живет index.php Laravel.   -  person Stuart Wagner    schedule 08.06.2015
comment
@StuartWagner Я изменил корневую папку документа на общую папку, мои красивые URL-адреса из route.php по-прежнему не работают.   -  person neh11    schedule 08.06.2015
comment
Убедитесь, что ваш .htaccess настроен правильно. Все запросы должны быть направлены на index.php, чтобы Laravel мог их захватить.   -  person Stuart Wagner    schedule 08.06.2015
comment
Мой файл .htaccess похож на фрагмент, размещенный на www.laravel.com/docs/5.0, который, как говорят, используется, если оригинал не работает.   -  person neh11    schedule 08.06.2015


Ответы (1)


Что касается конфигурации Apache, вроде все в порядке. Что я предпочитаю, так это отключать индексы (чтобы предотвратить список каталогов) и MultiViews (чтобы предотвратить неявное совпадение с шаблоном имени файла).

<Directory /var/www/html>

    Options +FollowSymLinks -MultiViews -Indexes
    AllowOverride All
    Require all granted

    #some general directives could be handy here also
    <FilesMatch "\.(png|jp?g|gif|ico|mp4|wmv|mov|mpeg|css|map|woff?|eot|svg|ttf|js|json|pdf|csv)">
            ExpiresActive on
            ExpiresDefault "access plus 2 weeks"
    </FilesMatch>

</Directory>

Похоже, проблема связана с правами доступа. По умолчанию Apache работает как www-data:www-data. Это может быть изменено в envvars (изменения должны сопровождаться перезапуском Apache) или во время, указанное в качестве параметра времени компиляции. /etc/apache2/envvars

...
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
...

Тем не менее, более хороший способ был бы

  • изменить группу /var/www/html на www-data с sudo chown :www-data /var/www/html
  • измените режим /var/www/html на 2770 с помощью sudo chmod 2770 /var/www/html. Поскольку Apache требуется разрешение на выполнение для доступа к каталогу. Примените эту команду к другим каталогам рекурсивно
  • измените режим статических файлов в вашем общедоступном каталоге на 2660 в целях безопасности.
person sitilge    schedule 09.06.2015