.htaccess не работает apache
У меня есть сервер из сервиса AWS EC2, работающий в Linux Ubuntu, и я установил apache, php и mysql.
Я добавил .htaccess
файл в корне моего документа /var/www/html
,
Я ввел этот код в нем: ErrorDocument 404 /var/www/html/404.php
и это все еще не обнаруживается.
Я продолжал вводить эту команду несколько раз: sudo service httpd restart
перезагрузить сервер, но не отображаются изменения...
Как я могу это исправить... Я сделал что-то не так?
Заранее спасибо!
14 ответов
Во-первых, обратите внимание, что перезапуск httpd не требуется для файлов.htaccess. Файлы.htaccess специально предназначены для людей, у которых нет root - то есть они не имеют доступа к файлу конфигурации сервера httpd и не могут перезапустить сервер. Поскольку вы можете перезапустить сервер, вам не нужны файлы.htaccess, и вы можете напрямую использовать конфигурацию основного сервера.
Во-вторых, если файлы.htaccess игнорируются, вам необходимо проверить, правильно ли установлен AllowOverride. См. http://httpd.apache.org/docs/2.4/mod/core.html для получения подробной информации. Вам также необходимо убедиться, что он установлен в правильной области, то есть в правильном блоке в вашей конфигурации. Убедитесь, что вы НЕ редактируете, например, блок.
В-третьих, если вы хотите убедиться, что файл.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
Просто выполните 3 шага
Включите mode_rewrite, используя следующую команду
sudo a2enmod переписать
Пароль будет запрошен. Так что введите свой пароль
Обновите файл 000-default.conf или default.conf, расположенный в каталоге /etc/apache2/sites-available/. Вы не можете редактировать его напрямую. поэтому используйте следующую команду, чтобы открыть
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
Скорее всего, для AllowOverride установлено значение None. в разделе каталога apache2.conf, расположенном в папке /etc/apache2
Попробуйте установить для него AllowOverride All
По моему опыту, директива / 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
Перейдите в /etc/apache2/apache2.conf
Вы должны отредактировать этот файл (у вас должны быть права root). Измените текст каталога, как показано ниже:
Параметры Индексы FollowSymLinks
AllowOverride All
Требовать все разрешено
Теперь вам нужно перезапустить apache.
перезапуск службы apache2
Я разрешил это использование. Используя этот сайт, нажмите здесь, следуйте инструкциям, те же шаги выполняются до версии ubuntu 18.04.
Для полноты картины, если "AllowOverride All" не решает вашу проблему, вы можете отладить эту проблему, используя:
Пробег
apachectl -S
и посмотрите, есть ли у вас более одного namevhost. Возможно, httpd ищет.htaccess другого DocumentRoot.Использовать
strace -f apachectl -X
и ищите, откуда загружается (или не загружается) .htaccess.
В WampServer
Откройте значок WampServer в трее ----> Apache ---> Apache Modules --->rewrite_module
у меня на виртуалке куча сайтов и я решил это только сменой конфига того сайта в котором мне нужен был .htaccess
что я сделал:
-
sudo a2enmod rewrite
затем я изменил конфигурацию только для конкретного сайта, а не для каждого сайта «example.com».
-
sudo nano /etc/apache2/sites-enable/example.com.conf
внутри него я добавил
<Directory /var/www/example.com>
AllowOverride All
</Directory>
-
service apache2 restart
так что это применимо только к 1 сайту, потому что, когда я попытался применить изменения ко всему серверу, он разбился, не знаю почему, но это решило мою проблему