.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.

  1. Включить модуль Apache mod_rewrite

    a2enmod rewrite

  2. добавьте следующий код в /etc/apache2/sites-available/default

    AllowOverride All

  3. Перезапустите 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 шага

  1. Включите mode_rewrite, используя следующую команду

    sudo a2enmod переписать

Пароль будет запрошен. Так что введите свой пароль

  1. Обновите файл 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>

Сделайте так, чтобы путь тега каталога был таким же, как показано в вашем файле.

  1. Перезагрузите сервер 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" не решает вашу проблему, вы можете отладить эту проблему, используя:

  1. Пробег apachectl -Sи посмотрите, есть ли у вас более одного namevhost. Возможно, httpd ищет.htaccess другого DocumentRoot.

  2. Использовать strace -f apachectl -X и ищите, откуда загружается (или не загружается) .htaccess.

В WampServer Откройте значок WampServer в трее ----> Apache ---> Apache Modules --->rewrite_module

у меня на виртуалке куча сайтов и я решил это только сменой конфига того сайта в котором мне нужен был .htaccess

что я сделал:

  1. sudo a2enmod rewrite

затем я изменил конфигурацию только для конкретного сайта, а не для каждого сайта «example.com».

  1. sudo nano /etc/apache2/sites-enable/example.com.conf

внутри него я добавил

      <Directory /var/www/example.com>
    AllowOverride All
</Directory>
  1. service apache2 restart

так что это применимо только к 1 сайту, потому что, когда я попытался применить изменения ко всему серверу, он разбился, не знаю почему, но это решило мою проблему

Используйте RewriteBase /{ваша папка}/ на вашем.htaccess

Другие вопросы по тегам