Вы создали в директории с сайтом файл .htaccess, но чтобы вы туда не писали, ни одна директива не работает. Почему?
Скорее всего здесь виновата опция AllowOverride в apache.
Куда же ее вставлять?
Заходим в конфигурационный файл Apache — httpd.conf. В FreeBSD он располагается здесь:
В других системах расположение другое. Но в целом не так трудно его найти:)
Находим такой блок … , если нет то создаем его:
AllowOverride All
Order allow,deny
Allow from all
Если есть, то добавляем либо меняем опцию AllowOverride:
/usr/local/www/apache22/data/site.ru — это абсолютный путь до вашей директории, где лежит файл .htaccess
AllowOverride All — здесь сказано что если существует файл .htaccess, то все (All) директивы прописанные в нем выполнять. Кстати если не хотите чтоб сервер читал файл .htaccess то замените «All» на «None».
Allow from all — доступ к папке имеют все.
После того как добавили блок с описанием вашей директории перезапускаем apache.
Теперь все директивы в файле .htaccess должны отрабатывать.
У меня есть сервер из сервиса AWS EC2, работающий в Linux Ubuntu, и я установил apache, php и mysql.
Я добавил .htaccess файл в корне моего документа /var/www/html ,
Я ввел этот код в нем:
ErrorDocument 404 /var/www/html/404.php и это все еще не обнаруживается.
Я продолжал вводить эту команду несколько раз: sudo service httpd restart перезагрузить сервер, но не отображаются изменения …
Как я могу это исправить … Я сделал что-то не так?
Решение
Во-первых, обратите внимание, что перезапуск httpd не требуется для файлов .htaccess. Файлы .htaccess специально предназначены для людей, у которых нет root — то есть они не имеют доступа к файлу конфигурации сервера httpd и не могут перезапустить сервер. Поскольку вы можете перезапустить сервер, вам не нужны файлы .htaccess, и вы можете напрямую использовать конфигурацию основного сервера.
Во-вторых, если файлы .htaccess игнорируются, вам необходимо проверить, правильно ли установлен AllowOverr > для деталей. Вам также необходимо убедиться, что он установлен в правильной области — то есть в правильном блоке в вашей конфигурации. Будь уверен НЕ редактирование одного в блоке, например.
В-третьих, если вы хотите убедиться, что файл .htaccess действительно читается, поместите в него мусор.
Недопустимая строка, такая как «INVALID LINE HERE», в вашем файле .htaccess приведет к ошибке 500 Server, когда вы укажете браузеру на каталог, содержащий этот файл. Если это не так, то у вас не настроен AllowOverride правильно.
Другие решения
Включить модуль Apache mod_rewrite
добавьте следующий код в /etc/apache2/sites-available/default
Если вы перепробовали все вышеперечисленное, которые являются действительными и хорошими ответами, и ваш файл htaccess не работает или читается, измените директиву в apache2.conf файл. Под Ubuntu путь /etc/apache2/apache2.conf
Изменить директива, указывающая на ваши общедоступные веб-страницы, где находится файл htaccess. Меняться от AllowOverride None в AllowOverride All
За Ubuntu,
Сначала запустите эту команду:
Затем отредактируйте файл /etc/apache2/sites-available/000-default.conf используя nano или vim с помощью этой команды: —
Тогда в 000-default.conf файл, добавьте это после строки DocumentRoot /var/www/html , Если ваш корневой каталог html — это что-то другое, то напишите:
Сделав все, перезапустите apache с помощью команды sudo service apache2 restart
Скорее всего, для AllowOverride установлено значение None. в разделе каталога apache2.conf, расположенном в папке / etc / apache2
Попробуйте установить для него AllowOverride All
Просто выполните 3 шага
Включите mode_rewrite, используя следующую команду
sudo a2enmod переписать
Пароль будет запрошен. Так что введите свой пароль
Обновите свой 000-default.conf или же default.conf файл находится в / и т.д. / apache2 / сайты-доступны / каталог. Вы не можете редактировать его напрямую. поэтому используйте следующую команду, чтобы открыть
sudo gedit /etc/apache2/sites-available/000-default.conf
Или же
sudo gedit /etc/apache2/sites-available/default.conf
линия. Добавьте следующий код после него.
Сделайте так, чтобы путь тега каталога был таким же, как показано в вашем файле.
Перезагрузите сервер apache, используя следующую команду
перезапуск службы sudo apache2
По моему опыту, директива / var / www / directory запрещает директивы virtualhost. Так что, если вы перепробовали все предложения и все еще не работали, и вы используете виртуальные хосты, попробуйте это;
1 — убедитесь, что у вас есть
AllowOverride All директива в
/etc/apache2/sites-available/example.com.conf
2 — Проверьте / var / www / Директивы директивы в /etc/apache2/apache2.conf (возможно, в строке 164), которая выглядит так;
Если есть AllowOverride None директива изменить его на
AllowOverride All или просто сбежать
По умолчанию Apache запрещает использование файла .htaccess для применения правил перезаписи, поэтому
Шаг 1 — Включение mod_rewrite (если не включено)
Во-первых, нам нужно активировать mod_rewrite. Он доступен, но не включен с чистой установкой Apache 2.
Это активирует модуль или предупредит вас, что модуль уже включен. Чтобы эти изменения вступили в силу, перезапустите Apache.
mod_rewrite теперь полностью включен. На следующем шаге мы настроим файл .htaccess, который будем использовать для определения правил перезаписи для перенаправлений.
Шаг 2 — Настройка .htaccess
Откройте файл конфигурации Apache по умолчанию, используя nano или ваш любимый текстовый редактор.
Внутри этого файла вы найдете блок, начинающийся с первой строки. Внутри этого блока добавьте следующий новый блок, чтобы ваш файл конфигурации выглядел следующим образом. Убедитесь, что все блоки имеют правильные отступы.
Сохраните и закройте файл. Чтобы эти изменения вступили в силу, перезапустите Apache.
Проблема распрастраненая, сначало облазил кучу мануалов и пробывал разные варианты, в итоге не зашло. Вот теперь пишу. Только вникаю в linux. поставил апач2 туда засунул mod_rewrite, создал виртуальный хост ( закинул туда проектик на yii2 с openservera )
в настройках апача , а именно тут /etc/apache2/apache2.conf прописано следующее : AccessFileName .htaccess
виртуальный хост загружается — с этим проблем нет , а вот файл .htaccess не видит в упор. Отмечу — что в синтаксисе самого проекта ошибок нет, т.к взят рабочий проект с win OpenServer.
и дополнительный вопрос apache и apache2 , различие в версиях?