Как включить mod_rewrite на Apache 2.4?

Я использую Wordpress и хотел включить функцию красивых URL-адресов, но они не работают, я думаю, что это из-за mod_rewrite, но я не знаю, как включить его на Apache 2.4 под CentOS 7...

Я уже пробовал это:

grep -i LoadModule /etc/httpd/conf/httpd.conf | grep rewrite

но ничего ... Также хотелось бы знать, что загрузка всех модулей Apache имеет какие-либо плохие последствия или это плохая практика?


person Jonathan Solorzano    schedule 15.06.2015    source источник
comment
в наши дни обычно существует больше, чем один монолитный .conf. например многие дистрибутивы помещают конфигурации/включения модуля в файлы для каждого модуля.   -  person Marc B    schedule 16.06.2015
comment
Хммм, а вы знаете, как сейчас работает Centos 7?   -  person Jonathan Solorzano    schedule 16.06.2015


Ответы (7)


Я нашел способ узнать, загружен модуль или нет, вот команда для вывода списка включенных модулей:

apachectl -M | sort

В нем будут перечислены все включенные модули в алфавитном порядке.

Wordpress имеет .htaccess, но по умолчанию, где он включает rewrite_module для его использования:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Единственное, что мне нужно было сделать, это добавить это в файл vhost.conf по адресу /etc/httpd/conf.d/vhosts.conf.

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

Это потому, что я обрабатываю свои хосты в этом файле. Но это можно сделать в httpd.conf или в любом другом .conf файле, включенном в httpd.conf

Спасибо...

person Jonathan Solorzano    schedule 15.06.2015
comment
AllowOverride All важная часть; и он должен находиться внутри блока <Directory> (я запутался, поместив его в блок <Location>, и он не жаловался, но и не работал) - person Matija Nalis; 18.01.2017
comment
но каталог /etc/httpd НЕ существует в apache 2.4! (убунту 16.04) - person Louis; 19.05.2017
comment
AllowOverride All имеет проблемы с безопасностью (и с производительностью тоже). Проверьте httpd.apache.org/docs/current/howto/htaccess.html. - person Arthur Ronconi; 12.07.2017
comment
Мне не хватало этого, поэтому mod_rewrite у меня не работал. Установите для параметра AllowOverride значение All, и все заработает! - person Anos K. Mhazo; 13.09.2017

Apache2 поставляется с исполняемыми файлами a2enmod и a2dismod, которые будут выполнять всю «грязную работу» по символическим ссылкам на файлы conf.

В дистрибутивах на базе Debian обычное расположение — /etc/apache/mods-available/. Вот файлы конфигурации .conf (если применимо) и файл .load для каждого модуля с директивой LoadModule Apache2. Модуль включен, если в файле /etc/apache2/mods-enabled/ есть символическая ссылка на его файл .load.

Вы бы, например, включили модуль Rewrite с помощью команды

$ a2enmod rewrite
person marekful    schedule 15.06.2015
comment
О, а каков синтаксис?, a2enmod mod_rewrite? - person Jonathan Solorzano; 16.06.2015
comment
Тогда вы не используете версию Apache2.4 из официального репозитория дистрибутива, т.е. установленную из другого источника или скомпилированную вручную. - person marekful; 16.06.2015
comment
Нет... у меня это не сработало... все равно пишет, что команда не найдена. В Centos 7 это расположение /etc/httpd/modules/. - person Jonathan Solorzano; 16.06.2015
comment
хммм, как мне проверить, установил ли я его из официального репо?, как мне переустановить его из официального репо? - person Jonathan Solorzano; 16.06.2015
comment
Да, я писал в дистрибутивах на основе Debian. CentOs не один. - person marekful; 16.06.2015
comment
Да, вы правы, я не устанавливал его из официального репо. Как это исправить? - person Jonathan Solorzano; 16.06.2015
comment
См. этот stackoverflow.com /вопросы/7527652/ - person marekful; 16.06.2015
comment
Тогда этот ответ недействителен ... я указал Centos, и в этом ответе говорится, что a2enmod a2dismod не работает на Centos - person Jonathan Solorzano; 16.06.2015
comment
О, славное, прекрасное, великолепное создание! Да! - person Peter Kionga-Kamau; 13.12.2020

# nano /etc/httpd/conf/httpd.conf

найти

follow (AllowOverride none) 

и изменить его

(AllowOverride All) 
person reimi    schedule 15.01.2016
comment
AllowOverride All имеет проблемы с безопасностью (и с производительностью тоже). Проверьте httpd.apache.org/docs/current/howto/htaccess.html. - person Arthur Ronconi; 12.07.2017

В httpd.conf найдите AllowOverride None и измените его на AllowOverride All, затем перезапустите apache.

person Kent Aguilar    schedule 26.03.2017

Да, изменение с «Переопределить ничего» на «Переопределить все» заставило его работать:

В Debian 10 файл конфигурации находится здесь:

/etc/apache2/apache2.conf

Я не знаю угроз безопасности, но это работает!

person camillo777    schedule 11.11.2019

Только для CentO 7: a2enmod — это команда Debian/Ubuntu. Вам потребуется отредактировать файл конфигурации Apache для сервера CentOS.

Вам нужно отредактировать файл /etc/httpd/conf/httpd.conf и убедиться, что флаг AllowOverride для блока изменен с >Нет на Все.

В основном это должно быть примерно так: (Примечание: в файле httpd.conf по умолчанию есть много строк комментариев)

‹Каталог "/var/www/html"› Разрешить переопределение всех ‹/Directory›

person Kodali444    schedule 25.12.2019

для модуля перезаписи просто проверьте это пошаговое руководство YouTube, связанное с включением модуля перезаписи в wamp apache https://youtu.be/xIspOX9FuVU?t=1m43s
Значок сервера Wamp -> Apache -> Модули Apache и отметьте как отметку для опции модуля перезаписи
после этого вы сможете использовать перезапись URL

person Hassan Saeed    schedule 10.10.2016