Ошибка, вероятно, не из-за .htaccess.Скорее всего, вы не настроили конфигурацию сервера должным образом и не дали разрешение на доступ к папке.
На веб-сервере Apache это разрешение часто задается в разделе <Directory>
конфигурации.Вот общий пример.
<VirtualHost _default_:443>
ServerName example.com
DocumentRoot /var/www/example/htdocs
<Directory /var/www/example/htdocs>
AllowOverride All
Require all granted
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</Directory>
# many other directives too
</VirtualHost>
Директива, которая предоставляет разрешение - это строка Require all granted
.Вышеуказанное обычно находится в файле, хранящемся в /etc/apache2/sites-available
.
Обратите внимание, что вы можете использовать RewriteEngine в файлах конфигурации сервера.На самом деле, это лучший способ.Использовать .htaccess
следует только в том случае, если вы не можете самостоятельно редактировать файлы конфигурации, например, на виртуальном хостинге.Но поскольку вы работаете в AWS, вы можете и должны сами управлять конфигурацией.Некоторое чтение дает хорошее объяснение того, почему вы не должны использовать .htaccess .
Поведение "это работает без .htaccess", вероятно, потому, что действует директива AllowOverride None
.Эта директива отключает возможность использования .htaccess
в каталоге.Когда вы пытаетесь «переопределить директивы» через .htaccess
, то разрешение отклоняется.
Другая возможная проблема заключается в том, что папка, содержащая index.php
, не имеет правильного «владельца», как правило, «www-data: www».-данные "через вариации найдены.