.htaccess не работает apache

112

У меня есть сервер из службы AWS EC2, работающий на Linux ubuntu, и я установил apache, php и mysql.

Я добавил файл .htaccess в свой файл root /var/www/html.

Я ввел в него этот код: ErrorDocument 404/var/www/html/404.php и он по-прежнему не отображается.

Я продолжал вводить эту команду несколько раз: sudo service httpd restart для перезапуска сервера, но никаких изменений не отображалось...

Как я могу исправить это... Я сделал что-то не так?

Заранее спасибо!

  • 2
    Вы уверены, что хотите сопоставить ошибку 400 Bad Request с /var/www/html/404.php ?
Теги:
amazon-web-services
.htaccess
amazon-ec2
apache-config

10 ответов

232
Лучший ответ

Во-первых, обратите внимание, что перезапуск httpd не требуется для файлов .htaccess. Файлы .htaccess предназначены специально для людей, у которых нет корневого каталога, т.е. не имеют доступа к конфигурационному файлу сервера httpd и не могут перезапустить сервер. Поскольку вы можете перезагрузить сервер, вам не нужны файлы .htaccess и можете напрямую использовать конфигурацию основного сервера.

Во-вторых, если файлы .htaccess игнорируются, вам нужно проверить, правильно ли установлено AllowOverride. Подробнее см. http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride. Вы также должны убедиться, что он установлен в правильной области - то есть в правом блоке в вашей конфигурации. Убедитесь, что вы НЕ редактируете файл в блоке, например.

В-третьих, если вы хотите убедиться, что файл .htaccess на самом деле читается, поместите в него мусор. Недопустимая строка, например "INVALID LINE HERE", в вашем файле .htaccess приведет к ошибке 500 Server, когда вы укажете свой браузер в каталоге, содержащем этот файл. Если это не так, значит, у вас нет правильно настроенного AllowOverride.

  • 118
    +1 за размещение мусора в файле .htaccess в качестве диагностического инструмента.
  • 38
    Мусор в программировании полезнее, чем кажется.
Показать ещё 3 комментария
91
  1. Включить модуль mod_rewrite Apache

    a2enmod rewrite

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

    AllowOverride All

  3. Перезапустить apache

    /etc/init.d/apache2 restart

  • 7
    обратите внимание, что в Apache 2.4 файлы конфигурации в / etc / apache2 / sites-available должны заканчиваться на .conf. И у меня на сервере была какая-то путаница с файлом default.conf в / etc / apache2 / sites-available и одним в / etc / apache2 /
  • 2
    Спасибо, в моем случае перезапись не была включена по умолчанию в apache2
Показать ещё 2 комментария
36

Если вы пробовали все вышеперечисленные, которые являются действительными и хорошими ответами, а ваш файл 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

  • 1
    Или, это может быть добавлено на VHost
  • 0
    На самом деле, только 3- AllowOverride FileInfo требуется для чтения и использования файла .htaccess . All также включает дополнительные переопределения конфигурации, такие как .httpasswd (который можно включить отдельно, используя Authconfig вместо All ).
15

Для 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

5

Скорее всего, AllowOverride установлен на None. в разделе каталога apache2.conf, расположенном в папке /etc/apache 2

Попробуйте настроить его на AllowOverride All

4

Просто выполните 3 шага

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

    sudo a2enmod rewrite

Будет запрошен пароль. Введите пароль

  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 service apache2 restart

2

По моему опыту, директива /var/www/directory запрещает директивы virtualhost в папке. Поэтому, если вы пробовали все предложения и все еще не работали, и вы используете virtualhosts, попробуйте это;

1 - Убедитесь, что у вас есть директива AllowOverride All в /etc/apache2/sites-available/example.com.conf

2 - Проверить/var/www/Директивы /etc/apache2/apache2.conf в /etc/apache2/apache2.conf (возможно, на строке 164), которая выглядит;

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Если есть директива AllowOverride None измените ее на AllowOverride All или просто на AllowOverride All escape

1

В WampServer Открыть значок WampServer Tray ---- > Apache --- > Модули Apache --- > rewrite_module

0

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

-1

По умолчанию 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню