Как включить mod_rewrite для Apache 2.2 - PullRequest
450 голосов
/ 15 мая 2009

У меня новая версия Apache 2.2 на моей машине с Vista, все работает отлично, кроме перезаписи модов.

Я не комментировал

LoadModule rewrite_module modules/mod_rewrite.s

но ни одно из моих правил перезаписи не работает, даже такие простые, как

RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404

Все правила, которые я использую, работают на моем хостинге, поэтому они должны быть в порядке, поэтому мой вопрос, есть ли какая-то скрытая вещь в конфигурации apache, которая может блокировать перезапись мода?

Ответы [ 15 ]

960 голосов
/ 22 апреля 2011

Чтобы использовать mod_rewrite, вы можете ввести в терминале следующую команду:

sudo a2enmod rewrite

Перезапустите apache2 после

sudo /etc/init.d/apache2 restart

или

sudo service apache2 restart

или согласно новому унифицированному способу управления системой

sudo systemctl restart apache2

Затем, если хотите, вы можете использовать следующий .htaccess файл.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

Приведенный выше файл .htaccess (если он помещен в DocumentRoot) перенаправит весь трафик в файл index.php в DocumentRoot, если файл не существует.

Итак, допустим, у вас есть следующая структура каталогов, а httpdocs - это DocumentRoot

httpdocs/
    .htaccess
    index.php
    images/
        hello.png
    js/
        jquery.js
    css/
        style.css
includes/
    app/
        app.php

Любой файл, который существует в httpdocs, будет передан запрашивающей стороне с помощью .htaccess, показанного выше, однако все остальное будет перенаправлено на httpdocs/index.php. Файлы вашего приложения в includes/app не будут доступны.

221 голосов
/ 24 февраля 2011

Для моей ситуации у меня было

RewriteEngine On

в моем .htaccess вместе с загружаемым модулем, и он не работал.

Решением моей проблемы было редактирование записи vhost в inlcude

AllowOverride all

в разделе <Directory> для данного сайта.

79 голосов
/ 04 ноября 2011

Попробуйте установить: AllowOverride All.


Второй наиболее распространенной проблемой является отсутствие перезаписи мода: a2enmod rewrite, а затем перезапустите apache.

73 голосов
/ 07 августа 2012

Если ни одна из вышеперечисленных работ не работает, попробуйте отредактировать / etc / apache2 / sites-enabled / 000-default

почти наверху вы найдете

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

Измените AllowOverride None на AllowOverride All

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

43 голосов
/ 11 июля 2012

В Ubuntu:

Пробег:

a2enmod rewrite

и затем:

service apache2 restart

mod_rewrite теперь будет включено!

28 голосов
/ 09 февраля 2014

Существует множество способов решения этой проблемы, если вы знаете корень проблемы.

Задача 1

Во-первых, это может быть проблема с вашим apache, у которого не установлен или не включен модуль mod_rewrite.c.

По этой причине вам придется включить его следующим образом

  1. Откройте консоль и введите в нее:

    sudo a2enmod rewrite

  2. Перезагрузите сервер apache.

    service apache2 restart

Задача 2

  1. Вы также можете, в дополнение к вышесказанному, если это не работает, изменить правило переопределения из файла apache conf (либо apache2.conf, http.conf, либо файл 000-default).

  2. Найдите "Directory / var / www /"

  3. Измените «Переопределить нет» на «Переопределить все»

Задача 3

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

  1. Введите это в консоли:

    sudo a2enmod userdir

  2. Затем попробуйте включить модуль перезаписи, если он все еще не включен (как упомянуто выше).

Чтобы узнать больше об этом, вы можете посетить этот сайт: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html

26 голосов
/ 04 июля 2014

Откройте терминал и введите a2enmod rewrite, он включит ваш mod_rewrite модуль для Apache.

Затем перейдите к /etc/apache2/sites-available и отредактируйте файл по умолчанию. (Для этого у вас должны быть права на запись в этот файл и в папку, доступную для сайтов.)

Заменить ниже существующими строками с 4 по 14

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

Теперь перезапустите ваш apache с помощью /etc/init.d/apache2 restart или service apache2 restart

Снова проведите чистый тест URL, и на этот раз он будет пройден.

22 голосов
/ 18 июня 2015

В новой версии apache есть некоторые изменения. Если у вас версия Apache 2.4, вам нужно перейти на /etc/apache2/. Там будет файл с именем apache2.conf. Вы должны отредактировать это (у вас должны быть права суперпользователя). Изменить текст каталога следующим образом

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

Теперь перезапустите apache.

service apache2 reload

Надеюсь, это сработает.

15 голосов
/ 17 мая 2009

Просто заметил, что вы сказали mod_rewrite.s вместо mod_rewrite.so - надеюсь, это опечатка в вашем вопросе, а не в файле httpd.conf! :)

Я более привык использовать Apache в Linux, но мне пришлось сделать это на днях.

Прежде всего, загляните в каталог установки Apache. (Я предполагаю, что вы установили его в «C: \ Program Files» здесь)

Посмотрите в папку: «C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ modules» и убедитесь, что там есть файл mod_rewrite.so. (Должно быть, это предусмотрено как часть установки по умолчанию.

Затем откройте «C: \ Program Files \ Apache Software Foundation \ Apache2.2 \ conf» и откройте httpd.conf. Убедитесь, что строка:

#LoadModule rewrite_module modules/mod_rewrite.so

не прокомментировано:

LoadModule rewrite_module modules/mod_rewrite.so

Также, если вы хотите включить RewriteEngine по умолчанию, вы можете добавить что-то вроде

<IfModule mod_rewrite>
    RewriteEngine On
</IfModule>

до конца вашего файла httpd.conf.

Если нет, обязательно укажите

RewriteEngine On

где-то в вашем файле .htaccess.

5 голосов
/ 12 октября 2014

Я только что сделал это

sudo a2enmod rewrite

тогда вам нужно перезапустить службу apache, выполнив команду

sudo service apache2 restart
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...