Как активировать mod_rewrite?

Я знаю, что этот вопрос задавали несколько раз. Но я не могу заставить его работать.

Я установил Apache2 на моем сервере Ubuntu. Я также могу подтвердить, что mod_rewrite установлен с использованием phpinfo () ;. Я также поместил файл с именем .htaccess в свою корневую папку (/var/www/.htaccess). В моем файле .htaccess вставьте следующий код:

Options +FollowSymLinks RewriteEngine On RewriteRule ^.*$ test.php 

Итак, все перенаправлено на test.php

Но это все еще не работает. Поэтому я проверил файл httpd.conf в файле / etc / apache2. Он полностью пуст, без строк кода (это кажется мне немного странным) ?! Однако при проверке ответов Stackoverflow в httpd.conf должен быть по крайней мере следующий код:

 <Directory /> Options FollowSymLinks AllowOverride All Order deny,allow Deny from all Satisfy all </Directory> 

Поэтому я вставляю этот код в httpd.conf. И перезапустил Apache с sudo /etc/init.d/apache restart . И это все еще не работает?

Я также проверил, чтобы открыть файл / sites-enabled / 000-default и / sites-available / default, где все настройки виртуального хоста лежат и изменяются в каталоге /var/www и / до AllowOverride All. Mod_rewrite все еще не работает. Кто-нибудь может мне помочь, пожалуйста. Эта проблема давно выпекала мои орехи.

Кроме того, файл apache2.conf не работает. Я пытался написать что-то бессмысленное. И он по-прежнему дает мне нормальный результат вместо ошибки http 500

Solutions Collecting From Web of "Как активировать mod_rewrite?"

Все предложения от Niels Bom самые умные (я думаю). Но я бы добавил это в качестве первого предложения: попробуйте запустить и остановить apache с помощью команды Ubuntu: тогда, когда он должен быть остановлен, убедитесь, что он остановлен, т. Е. Ваша локальная страница больше не отображается.

  • прочитайте, что находится в папке /etc/apache2/ . Должен быть apache2.conf conf.d envvars httpd.conf mods-available mods-enabled ports.conf sites-available sites-enabled
  • тогда, если все в порядке, взгляните на mods-enabled где вы найдете, если моды включены, если это так, то вы можете продолжить, иначе взгляните на другие ответы о включении modrewrite
  • взгляните на sites-enabled : здесь вы можете найти сайты, которые … (угадайте, что?) включены. Должен быть веб-сайт по default .
  • если это так, откройте этот файл и попытайтесь поместить в него вздор апачи, перезапустите сервер и посмотрите, счастлив он или нет. Если это не радует, это хорошо. Если он счастлив, вы работаете над неправильным файлом
  • last: попробуйте проверить, какие авторизации для файлов htaccess для этого vhost по умолчанию. Вот как они работают: если Apache не найдет директивы в файле vhost, она применит глобальную конфигурацию. Поэтому я предлагаю добавить конфигурацию в ваш vhost-файл, между <virtualhost></virtualhost> (конечно).

Пожалуйста, расскажите мне, что происходит, и я был бы рад соответствующим образом обновить свой вопрос.

если вы запустите эту команду,

 sudo a2enmod rewrite 

ubuntu будет выводить, если он активирован или уже запущен.

Поскольку этот поток занимает очень высокое место в google, здесь другое решение:

ЧТО ПРИНИМАЕТ ПРОБЛЕМУ?

Это вызвано тем, что стандартное определение в apache просто блокирует все .htaccess. Seriouslsy. Это, по-видимому, исходное состояние в Ubuntu 12.04 LTS.

РЕШЕНИЕ

В / etc / apache2 / sites-available / default (это файл, а не папка) есть блок кода, например

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

Здесь вы должны изменить

 AllowOverride None 

в

 AllowOverride All 

ВАЖНЫЙ

Вы должны сделать эти изменения с правами sudo, иначе Ubuntu не сохранит файл. После RESTART ваш файл .htaccess должен работать. Чтобы проверить .htaccess, просто поместите в него какой-то бессмысленный текст и перейдите на localhost или 127.0.0.1 -> Если вы видите «внутреннюю ошибку сервера»: voila! Удалите ерунду, и вы готовы к работе.

Хорошо, давайте проверим предположения:

  1. Положите вздор в свои конфигурационные файлы Apache (и перезапустите Apache, чтобы они вступили в силу), делает ли Apache «жаловаться» на перезапуск? Затем он пытается загрузить эти файлы. Попробуйте это для каждого конфигурационного файла Apache, который вы можете найти. Теперь у вас есть полный список загружаемых файлов конфигурации Apache.

  2. поместите вздор в ваш htaccess, перезагрузите страницу, вы получите ошибку 500? Если нет, то htaccess не загружается.

  3. Поместите самый базовый оператор mod_rewrite в htaccess:

    Опции + FollowSymLinks RewriteEngine On RewriteRule ^. * $ Test.html

Это должно переписать каждый запрос test.html.

Попробуйте это и дайте нам результаты.

Проверьте /etc/apache2/apache2.conf

В вашем вопросе вы упомянули,

Кроме того, файл apache2.conf не работает. Я пытался написать что-то бессмысленное. И он по-прежнему дает мне нормальный результат вместо ошибки http 500

Поэтому, прежде чем публиковать больше материалов для тестирования с .conf-файлами,

запустить strace -o somefilename.txt sudo /etc/init.d/apache restart

strace – трассировка системных вызовов и сигналов: strace (1) – справочная страница Linux .


Часть -o somefilename.txt помещает вывод strace в somefilename.txt . Откройте текстовый файл и выполните поиск httpd.conf . Вы должны иметь возможность видеть код, похожий на:

 stat("/etc/httpd/conf/httpd.conf", {st_mode=S_IFREG|0644, st_size=35894, ...})=0 open("/etc/httpd/conf/httpd.conf", O_RDONLY|O_CLOEXEC) = 3 

Путь к httpd.conf будет заменен на путь к вашему умолчанию httpd.conf

Если вы его найдете, откройте этот httpd.conf и внесите в него изменения. Else, httpd.conf не загружается.

Если это так, попробуйте:

 sudo /etc/init.d/apache -f /path/to/httpd.conf start 

Кроме того, проверьте NameVirtualHost *:80 и убедитесь, что он не комментируется.