Как включить 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?
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 это
DocumentRoothttpdocs/ .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 NonetoAllowOverride Allэто работает для меня
открыть терминал и 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.soRefrences
что работало для меня (в 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