.htaccess не читается

Я пытаюсь перенаправить мою домашнюю страницу или любую другую страницу на сайт на определенную страницу php. Это мой htaccess

Redirect 301 http://test.com/info http://test.com/get_forms_data.php
Options +FollowSymlinks
RewriteEngine ON
RewriteRule ^test.php$ http://test.com/get_forms_data.php [R=301,L]

Я проверил мой сервер apache.rewrite включен.

Он по-прежнему не работает.

Ответ 1

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

AllowOverride All

в настройках вашего сайта.

Если вы находитесь на ubuntu, место для поиска конфигурации - /etc/apache2/sites-available/. Там вы должны найти файл с именем default, если это установка пакета по умолчанию LAMP (https://help.ubuntu.com/community/ApacheMySQLPHP).

Ключевой частью является следующее:

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

Теперь измените AllowOverride None на AllowOverride All. После этого не забудьте перезапустить apache так:

$ service apache2 restart

Ответ 2

Как дополнение к ответу Моргана, размещение AllowOverride All в вашем виртуальном хосте иногда недостаточно. У меня это было на моем виртуальном хосте:

<VirtualHost *:80>
  ...
  <Directory />
   ...
   AllowOverride All
   ...
  </Directory>
</VirtualHost>

Вы ожидаете, что это сработает, не так ли, <Directory /> означает, что он должен применяться везде в файловой системе. Но .htaccess все еще игнорировалось. Перезапуск сервера не помог. Я помещал мусор в файл .htaccess, чтобы подтвердить, что он не читается.

Моя ошибка предполагала, что виртуальный хост переопределяет глобальную конфигурацию. Как бы то ни было: моя конфигурация переопределяет любые глобальные настройки для каталога /. Но глобальная конфигурация переопределяет его для /var/www/ и ниже. Мое исправление:

<VirtualHost *:80>
  ...
  <Directory /var/www>
   ...
   AllowOverride All
   ...
  </Directory>
</VirtualHost>

(это не предполагает никакой другой конфигурации, необходимой для применения внешнего /var/www, если это так, создайте отдельный блок <Directory /> только для этой специальной конфигурации.)

Ответ 3

Я боролся с той же проблемой, и ответ Даррена Кука дал мне окончательный ключ к поиску решения.

Мое приложение находилось в некоторой папке из общедоступного пути www, в разделе /opt/my_app. Я не мог создать VirtualHost, поэтому я создал символическую ссылку в общедоступной папке Apache www в моей папке:

/var/www/html/my_app -> /opt/my_app

Дело в том, что в моем конфигурационном файле App Apache я указывал:

<Directory /opt/my_app>
  AllowOverride All
</Directory>

И мой файл .htaccess не читался. Затем я увидел, что в конфигурации Apache это было:

<Directory /var/www/html>
  AllowOverride None
</Directory>

Тогда я понял, что файлы конфигурации Apache не заботятся о символических ссылках, и поэтому общее правило применялось к моему файлу приложения. Я изменил Directory на:

<Directory /var/www/html/my_app>
  AllowOverride All
</Directory>

И все сработало.

Ответ 4

Если перенаправление не работает, несмотря на обновление apache2.conf

Согласно принятому ответу, я обновил AllowOverride None до AllowOverride All в файле apache2.conf, однако перенаправление через файл .htaccess все еще не работало для меня!

<Directory /var/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All   # did not work inspite of setting to "All"
    Order allow,deny
    allow from all
</Directory>

Что сработало для меня...

Мне также пришлось включить перенаправление модулей

// enable module redirection
sudo a2enmod rewrite

Конечно, не забудьте перезапустить сервер apache, чтобы изменения вступили в силу

Ссылка