Как включить перезапись mod для Apache 2.2

у меня есть новая установка Apache 2.2 на моей машине Vista, все работает нормально, кроме mod переписать.

Я не раскаивался

LoadModule rewrite_module modules/mod_rewrite.s

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

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

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

16 ответов


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

sudo a2enmod rewrite

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

sudo /etc/init.d/apache2 restart

или

sudo service apache2 restart

или согласно новому пути управлением единой системы

sudo systemctl restart apache2

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

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

выше .htaccess файл (если он помещен в ваш DocumentRoot) перенаправит весь трафик на на 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 будет недоступен.


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

RewriteEngine On

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

решение моей проблемы состояло в том, чтобы отредактировать мою запись vhost в inlcude

AllowOverride all

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


Я написал об этом в статье: http://www.jarrodoberto.com/articles/2011/11/enabling-mod-rewrite-on-ubuntu

попробовать настройка: AllowOverride All.


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


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

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

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

изменить AllowOverride None to AllowOverride All

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


В Ubuntu:

Run:

a2enmod rewrite

и затем:

service apache2 restart

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


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


открыть терминал и typin a2enmod rewrite, Это позволит вашим mod_rewrite модуль для Apache.

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

заменить ниже существующими строками с 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 снова, и на этот раз он будет передан.


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

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

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

service apache2 reload

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


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

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

во-первых, посмотрите в каталоге установки Apache. (Я предполагаю, что вы установили его на "C:\Program файлы" здесь)

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

далее, откройте "C:\Program файлы\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.


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

sudo a2enmod rewrite

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

sudo service apache2 restart

очевидно, что есть несколько способов сделать это, но я бы предложил использовать более стандартный:

ErrorDocument 404 /index.php?page=404

в первый раз, когда я боролся с правилами mod_rewrite, игнорируя мой трафик, я узнал (разочарованно), что я поместил их в неправильном <VirtualHost>, что означало, что мой трафик будет игнорировать все из них независимо от того, насколько хорошо они были написаны. Убедиться, что это не происходит с вами:

# Change the log location to suit your system. RewriteLog /var/log/apache-rw.log RewriteLogLevel 2

эти параметры активируются, если вы выполняете изящный перезапуск Apache, поэтому вы можете повторно использовать их и внимательно следить за поведением mod_rewrite. Однажды ваша проблема исправлена, поверните RewriteLogLevel назад и отпразднуйте.

в 100% моего опыта я обнаружил, что RewriteLog помог мне обнаружить проблему с моими правилами перезаписи. Я не могу рекомендовать это достаточно. Удачи в устранении неполадок!

кроме того, эта закладка-ваш лучший друг: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog


я настоятельно рекомендую всем, кто хочет включить директивы mod_rewrite .htacces файлы для использования AllowOverride FileInfo вместо того, чтобы разрешать все, как предлагают все ответы на этой странице. Грустно видеть, что все эти ответы принимают подход "пока это работает", а не пытаются понять последствия предлагаемого "решения". Попытайтесь понять, что вы делаете на своем сервере и как ограничить привилегии, которые вы только что отдали с AllowOverride All. RTFM!, это совершенно ясно. Да ладно, чуваки, это не rocketscience, это просто веб-сервер!


старый поток, просто хочу поставить, что не устанавливайте AllowOverride для всех вместо использования конкретного мод, который вы хотите использовать,

AllowOverride mod_rewrite mod_mime

и эта строка должна быть ООН-прокомментировал

LoadModule rewrite_module modules/mod_rewrite.so

Refrences


что работало для меня (в ubuntu):

sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load

кроме того, как уже упоминалось, убедитесь AllowOverride all находится в соответствующем разделе /etc/apache2/sites-available/default


используйте команду ниже

sudo a2enmod rewrite

и перезапуск apache через команду ниже

sudo service apache2 restart