У меня есть сервер из сервиса 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 игнорируются, вам необходимо проверить, правильно ли установлен AllowOverride. Увидеть http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride для деталей. Вам также необходимо убедиться, что он установлен в правильной области — то есть в правильном блоке в вашей конфигурации. Будь уверен НЕ редактирование одного в блоке, например.
В-третьих, если вы хотите убедиться, что файл .htaccess действительно читается, поместите в него мусор.
Недопустимая строка, такая как «INVALID LINE HERE», в вашем файле .htaccess приведет к ошибке 500 Server, когда вы укажете браузеру на каталог, содержащий этот файл. Если это не так, то у вас не настроен AllowOverride правильно.
Включить модуль Apache mod_rewrite
a2enmod rewrite
добавьте следующий код в /etc/apache2/sites-available/default
AllowOverride All
Перезапустите Apache
/etc/init.d/apache2 restart
Если вы перепробовали все вышеперечисленное, которые являются действительными и хорошими ответами, и ваш файл htaccess не работает или читается, измените директиву в apache2.conf
файл. Под Ubuntu путь /etc/apache2/apache2.conf
Изменить <Directory>
директива, указывающая на ваши общедоступные веб-страницы, где находится файл htaccess. Меняться от AllowOverride None
в AllowOverride All
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
У меня была такая же проблема, и я нашел ответ и объяснение в Ubuntu Ask! Форум https://askubuntu.com/questions/421233/enabling-htaccess-file-to-rewrite-path-not-working
За Ubuntu,
Сначала запустите эту команду:
sudo a2enmod rewrite
Затем отредактируйте файл /etc/apache2/sites-available/000-default.conf
используя nano или vim с помощью этой команды: —
sudo nano /etc/apache2/sites-available/000-default.conf
Тогда в 000-default.conf
файл, добавьте это после строки DocumentRoot /var/www/html
, Если ваш корневой каталог html — это что-то другое, то напишите:
<Directory "/var/www/html">
AllowOverride All
</Directory>
Сделав все, перезапустите 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
ты получишь
DocumentRoot / var / www / html
ИЛИ ЖЕ
DocumentRoot / var / www
линия. Добавьте следующий код после него.
<Directory /var/www/html/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Сделайте так, чтобы путь тега каталога был таким же, как показано в вашем файле.
Перезагрузите сервер 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), которая выглядит так;
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Если есть AllowOverride None
директива изменить его на
AllowOverride All
или просто сбежать
По умолчанию Apache запрещает использование файла .htaccess для применения правил перезаписи, поэтому
Шаг 1 — Включение mod_rewrite (если не включено)
Во-первых, нам нужно активировать mod_rewrite. Он доступен, но не включен с чистой установкой Apache 2.
$ sudo a2enmod rewrite
Это активирует модуль или предупредит вас, что модуль уже включен. Чтобы эти изменения вступили в силу, перезапустите Apache.
$ sudo systemctl restart apache2
mod_rewrite теперь полностью включен. На следующем шаге мы настроим файл .htaccess, который будем использовать для определения правил перезаписи для перенаправлений.
Шаг 2 — Настройка .htaccess
Откройте файл конфигурации Apache по умолчанию, используя nano или ваш любимый текстовый редактор.
$ sudo nano /etc/apache2/sites-available/000-default.conf
Внутри этого файла вы найдете блок, начинающийся с первой строки. Внутри этого блока добавьте следующий новый блок, чтобы ваш файл конфигурации выглядел следующим образом. Убедитесь, что все блоки имеют правильные отступы.
/etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
. . .
</VirtualHost>
Сохраните и закройте файл. Чтобы эти изменения вступили в силу, перезапустите Apache.
$ sudo systemctl restart apache2
Готово. Ваш .htacess должен работать.
Эта ссылка может действительно помочь кому-то https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-16-04