.htaccess не працює апаш


135

У мене є сервер служби AWS EC2, який працює на Linux ubuntu, і я встановив apache, php і mysql.

Я додав .htaccessфайл у корінь документа /var/www/html.

Я ввів у нього цей код: ErrorDocument 404 /var/www/html/404.phpі він все ще не відображається.

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

Як я можу це виправити ... Чи я щось зробив не так?

Спасибі заздалегідь!


2
Ви впевнені, що хочете відобразити 400 Bad Requestпомилку /var/www/html/404.php?
— Джон Лін

Відповіді:


288

По-перше, зауважте, що перезавантаження httpd не потрібно для файлів .htaccess. .htaccess файли спеціально для людей, які не мають root, тобто не мають доступу до конфігураційного файлу сервера httpd і не можуть перезапустити сервер. Оскільки ви зможете перезапустити сервер, вам не потрібні файли .htaccess і ви можете безпосередньо використовувати основний конфігурацію сервера.

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

По-третє, якщо ви хочете переконатися, що файл .htaccess насправді читається, покладіть у нього сміття. Недійсний рядок, такий як "НЕВЕРЛІДНА ЛІНІЯ ТУТ" у вашому файлі .htaccess, призведе до помилки 500 серверів, коли ви вкажете браузер на каталог, що містить цей файл. Якщо цього немає, то у вас немає AllowOverride налаштований правильно.


141
+1 для внесення сміття у файл .htaccess як діагностичний інструмент.
— retrohacker

46
Сміття в програмуванні корисніше, ніж звучить.
— EnKrypt

1
Я поклав "A STRING" свій .htaccess, тому я отримав помилку, тому я вклав AllowOverride Allвсе apache2.confв свій Debian і це працює
— Alex

1
Зауважте, що AllowOverrideпрацює лише в <Directory>директивах і буде ігноровано, якщо розміщуватись у <Location ...>розділі, див .: httpd.apache.org/docs/2.4/mod/core.html#allowoverride
— Даніель Соколовський

2
Також зауважте, що <Directory>директива очікує абсолютного шляху замість відносного. У моєму випадку, <Directory /> не вдалося в той час <Directory /var/www/html/subdir>працював.
— Лукаш Кнут

115
  1. Увімкнути модуль Apache mod_rewrite

    a2enmod rewrite

  2. додати наступний код до /etc/apache2/sites-available/default

    AllowOverride All

  3. Перезапустіть апаш

    /etc/init.d/apache2 restart


7
зауважте, що в Apache 2.4 файли конфігурації під / etc / apache2 / sites-available мають закінчуватися .conf зараз. І у мене на сервері було деяке змішання з default.conf в / etc / apache2 / sites-available та одним в / etc / apache2 /
— rubo77

2
Дякую, у моєму випадку перезапис не було включено за замовчуванням в apache2
— Cross

Я вже виконую ці кроки, але це не працює в апачі 2.4, що я роблю неправильно = [
— Лучано Андресс Мартіні

Схоже, вимагають зміни в ip вимагають автентифікації, така поведінка є несподіваною (дозвольте певним ip в apache 2.2 не робити цього), і на мою думку, це може бути дуже небезпечно, тому що виняток ip анулює аутентифікацію, в apache 2.2 - це абсолютно різні речі !
— Лучано Андресс Мартіні

Я пропустив перший крок, але змінив AllowOverride на All у своєму апаш.конф (Debian 8, /etc/apache2/apache.conf), перезапустив і файли недоступні, добре. Але помилка не подібна дозволу, але 500 внутрішніх помилок сервера, чому це так? Чи можна це виправити?
— dasLort

44

Якщо ви спробували все вищезазначене, які є усіма правильними і хорошими відповідями, а ваш файл 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! форум /ubuntu/421233/enabling-htaccess-file-to-rewrite-path-not-working


2
Або його можна додати на VHost
— -anik

Насправді, для читання та використання файлів AllowOverride FileInfoпотрібен лише третій рядок .htaccess. Allтакож дозволяє додаткові скасування конфігурації, такі як .httpasswd(які можна вмикати окремо за допомогою Authconfigзамість All).
— Рафал

20

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


6

Просто виконайте 3 дії

  1. Увімкніть mode_rewrite за допомогою наступної команди

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

Пароль буде запропоновано. Тому введіть свій пароль

  1. Оновіть свій файл 000-default.conf або default.conf, який знаходиться за адресою / etc / apache2 / available-sites / . ви не можете редагувати це безпосередньо. тому використовуйте наступну команду, щоб відкрити

    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


Дякую. Привітання з Бразилії.
— Fox.11

5

Швидше за все, для AllowOverride встановлено значення None. у розділі Каталог apache2.conf, що знаходиться в папці / etc / apache2

Спробуйте встановити його на AllowOverride All


5

На мій досвід, директива / var / www / directory перешкоджає директивам virtualhost для підпапок. Отже, якщо ви спробували всі пропозиції і все ще не працюєте, і ви використовуєте віртуальні хости, спробуйте це;

1 - Будьте впевнені, що у вас є AllowOverride Allдиректива /etc/apache2/sites-available/example.com.conf

2 - Перевірте директиви / var / www / Directory у /etc/apache2/apache2.conf(можливо, у рядку 164), як виглядає;

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

Якщо є AllowOverride Noneдиректива, змініть її на AllowOverride All або просто втечі


3

За замовчуванням 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


Команда перезапуску, яка працювала на мене, $ sudo httpd -k restart(Red Hat 4.4.7-23)
— Гімалайський Гарг


1

У WampServerпіктограмі лотка Open WampServer ----> Apache ---> Apache Modules ---> rewrite_module



0

Для повноти, якщо "AllowOverride All" не усуне вашу проблему, ви можете налагодити цю проблему за допомогою:

  1. Запустіть apachectl -Sі подивіться, чи є у вас більше одного namevhost. Можливо, httpd шукає .htaccess іншого DocumentRoot.

  2. Використовуйте strace -f apachectl -Xі шукайте, звідки він завантажується (або не завантажує) .htaccess з.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.