Развернуть приложение Laravel - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь развернуть свое приложение Laravel и заблокировать доступ к другим файлам, таким как .env Я поместил все мое приложение laravel в папку www и добавил этот htaccess:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule> 

Но когда я захожу на URL своего домена, у меня есть все файлы .. похоже, мой htaccess не работает (он находится в корне приложения Laravel)

This is what I get when I go to my website url (this is the www foolder)

1 Ответ

0 голосов
/ 30 июня 2018

Вот простой метод, использующий только файл .htaccess, помещенный в корневой каталог Laravel - например, наряду с app, bootstrap, config, ... Никаких изменений в вашем коде не требуется.

Файл переписывает все запросы так, чтобы запрос /file.png фактически возвращал /public/file.png, а все остальное перенаправлялось на /public/index.php. Это также гарантирует отсутствие доступа к папке вне папки public, защищая таким образом любые конфиденциальные файлы, такие как .env или database/*.

.

Простой метод

Этот метод предполагает, что DOCUMENT_ROOT правильно установлен вашим сервером Apache. Попробуйте сначала и используйте второй метод, только если он не работает на вашем сервере.

.htaccess

RewriteEngine on

# serve existing files in the /public folder as if they were in /
RewriteCond %{DOCUMENT_ROOT}public%{REQUEST_URI} -f
RewriteRule (.+) /public/$1 [L]

# route everything else to /public/index.php
RewriteRule ^ /public/index.php [L]

Немного более сложный метод

Если ваш сервер не установил DOCUMENT_ROOT должным образом, вам нужно будет использовать абсолютный путь в RewriteCond. То есть абсолютный путь к файловой системе сервера. Вы можете получить его, скопировав следующий скрипт в каталог, в котором будет находиться ваша установка Laravel, и перейдя по его URL-адресу - т.е. http://example.com/get_doc_root.php.

get_doc_root.php

<?php
echo getcwd();

Это должно привести к чему-то вроде /var/www/example.com/web. Используйте следующий файл .htaccess и замените [[your path]] на фактический путь, который вы получили.

.htaccess

RewriteEngine on

# serve existing files in the /public folder as if they were in /
RewriteCond [[your path]]/public%{REQUEST_URI} -f
RewriteRule (.+) /public/$1 [L]

# route everything else to /public/index.php
RewriteRule ^ /public/index.php [L]

В нашем примере строка RewriteCond будет выглядеть следующим образом:

RewriteCond /var/www/example.com/web/public%{REQUEST_URI} -f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...