Как активировать mod_rewrite? - PullRequest
       7

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

10 голосов
/ 25 декабря 2011

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

Я установил 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 error

Ответы [ 6 ]

10 голосов
/ 25 декабря 2011

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

sudo a2enmod rewrite

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

7 голосов
/ 14 января 2012

Все предложения от Нильса Бома самые умные (я думаю). Но я бы добавил это в качестве первого предложения: попробуйте запустить и остановить 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.
  • если это так, откройте этот файл и попробуйте добавить в него чепуху apache, перезапустите сервер и посмотрите, счастлив он или нет. Если это не радует, это хорошо. Если он счастлив, значит вы работаете не с тем файлом
  • последнее: попробуйте проверить каковы разрешения для файлов htaccess для этого vhost по умолчанию. Вот как они работают: если Apache не найдет никакой директивы в файле vhost, он применит глобальную конфигурацию. Поэтому я бы предложил добавить конфигурацию в ваш vhost-файл между тегами <virtualhost> - </virtualhost> (конечно).

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

5 голосов
/ 16 октября 2012

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

2 голосов
/ 25 декабря 2011

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

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

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

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

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

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

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

0 голосов
/ 15 января 2012

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

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

Итак, перед тем, как публиковать больше материала для тестирования с файлами .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 и внесите в него изменения. Иначе, httpd.conf не загружается.

Если позже, попробуйте:

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

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

0 голосов
/ 25 декабря 2011

Пожалуйста, проверьте /etc/apache2/apache2.conf

...