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