Как включить mod rewrite для Apache 2.2



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



Я раскомментируйте строчку



LoadModule rewrite_module modules/mod_rewrite.s


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



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


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

631   16  

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.


вторая наиболее распространенная проблема заключается в том, что не включен режим перезаписи: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 by /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.so -надеюсь, что это опечатка в вашем вопросе, а не в httpd.конф файл! :)

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

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

посмотреть в папки: "C:\Program файлы\Апач основу программного обеспечения\apache2 не.Модули 2\" и убедитесь, что там есть файл с названием модуля mod_rewrite.так что там. (Это должно быть, это предусмотрено как часть установки по умолчанию.

далее, откройте "C:\Program Files\Apache Software Foundation\Apache2.2\conf" и откройте httpd.конф. Убедитесь, что строка:

#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

Comments

    Ничего не найдено.