#php #apache #.htaccess #laravel
#php #apache #.htaccess #laravel
Вопрос:
Я установил Laravel 5.1 и пытаюсь настроить его на общем хостинге. Я добавил index.php файл в корне проекта и файл .htaccess в общей папке, но все равно получаю:
500 Internal server Error
Я запустил: composer install
.
Я добавил в .env
файл конфигурацию базы данных.
У моей папки проекта есть имя cms
.
Затем я попытался изменить .htaccess file
public directory
вот так:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteBase /cms/
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
Мой .htaccess file
в project root
:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
# Options -MultiViews
</IfModule>
RewriteEngine On
RewriteBase /cms/
# RewriteBase /home/crewjobe/public_html/
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
# RewriteCond %{HTTP:Authorization} .
# RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
У меня есть index.php файл как в корневом каталоге проекта, так и в общедоступном каталоге.
Index.php в общедоступном каталоге устанавливается из laravel.
Index.php файл в корне проекта — это:
<?php
/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Laravel
* @author Taylor Otwell <taylorotwell@gmail.com>
*/
$uri = urldecode(
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);
//This file allows us to emulate Apache's "mod_rewrite" functionality from the
// built-in PHP web server. This provides a convenient way to test a Laravel
// application without having installed a "real" web server software here.
if ($uri !== '/' amp;amp; file_exists(__DIR__.' /public'.$uri)) {
return false;
}
require_once __DIR__.' /public/index.php';
Где я ошибаюсь? Существует ли стандартный способ настройки при новой установке Laravel? Спасибо.
Комментарии:
1. Я никогда не видел вложенных IF в .htaccess.. не уверен, что это проблема, но это выглядит странно. Предлагаю переместить это за пределы блока `if mod_rewrite’ <IfModule mod_rewrite.c> <IfModule mod_negotiation.c> # Параметры -MultiViews </IfModule>
2. Это создается с помощью установки laravel таким образом.. Я немного изменил другую часть
3. Откуда вы знаете, с чем связана проблема
.htaccess
? Ошибка 500 предполагает некоторую ошибку PHP. У вас естьerror.log
каталоги на вашемpublic
илиpublic_html
на общем хосте? Кроме того, добавьтеini_set('display_errors', 1); error_reporting(-1);
вindex.php
и проверьте, есть ли у вас подробная ошибка4. Я проверил журнал ошибок сервера, и там есть сообщение: «»/path/to/cms1″ доступен для записи группой» и «клиент запрещен конфигурацией сервера: /path/to/public_html/domain_name/.htaccess»
Ответ №1:
Спасибо, @milz, после того, как я проверил журнал ошибок сервера и нашел эти сообщения:
path/to/project/folder/ is writeable by group
и в поисках проблемы я нашел это решение: Решение
Я изменил права доступа к папке проекта 0644
, а также к папке project / public, и теперь все в порядке.