Как включить mod_rewrite для 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, которая может блокировать перестройку мод?
Ответы
Ответ 1
Чтобы использовать 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
не будут доступны.
Ответ 2
В моей ситуации у меня был
RewriteEngine On
в моем .htaccess
, вместе с загружаемым модулем, и он не работал.
Решение моей проблемы состояло в том, чтобы отредактировать мою запись vhost для inccude
AllowOverride all
в разделе <Directory>
для данного сайта.
Ответ 3
Я написал об этом в статье:
http://www.jarrodoberto.com/articles/2011/11/enabling-mod-rewrite-on-ubuntu
Попробуйте установить: AllowOverride All
.
Вторая наиболее распространенная проблема заключается не в том, что включен режим mod rewrite: a2enmod rewrite
, а затем перезапустите apache.
Ответ 4
Если не указано выше, попробуйте отредактировать /etc/apache 2/sites-enabled/000-default
почти вверху вы найдете
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Измените AllowOverride None
на AllowOverride All
это сработало для меня
Ответ 5
В Ubuntu:
Run:
a2enmod rewrite
а затем:
service apache2 restart
mod_rewrite
теперь будет включен!
Ответ 6
Существует множество способов устранения этой проблемы, если вы знаете корень проблемы.
Проблема 1
Во-первых, это может быть проблемой, когда ваш apache не имеет установленного или включенного модуля mod_rewrite.c.
По этой причине вам нужно включить его следующим образом
Проблема 2
-
Вы также можете в дополнение к вышесказанному, если он не работает, должны изменить правило переопределения из файла conf apache (apache2.conf, http.conf или 000-default file).
-
Найдите "Каталог/var/www/"
-
Измените "Override None" на "Override All"
Проблема 3
Если вы получите сообщение об ошибке, не сообщите, что модуль rewrite не найден, вероятно, ваш модуль userdir
не включен. По этой причине вам необходимо включить его.
Для дальнейшего ознакомления с этим вы можете посетить этот сайт: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
Ответ 7
Откройте терминал и введите 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-адреса, и на этот раз он будет передан.
Ответ 8
Новая версия 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
Надеюсь, что это сработает.
Ответ 9
< редактировать >
Просто заметил, что вы сказали 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.
Ответ 10
Я только что сделал это
sudo a2enmod rewrite
вам необходимо перезапустить службу apache, выполнив следующую команду
sudo service apache2 restart
Ответ 11
Очевидно, существует несколько способов сделать это, но я бы предложил использовать более стандартный:
ErrorDocument 404 /index.php?page=404
Ответ 12
В первый раз, когда я боролся с правилами mod_rewrite, игнорируя мой трафик, я узнал (разочаровывающе), что я поместил их в неправильный <VirtualHost>
, что означало, что мой трафик будет игнорировать всех из них no насколько хорошо они были написаны. Убедитесь, что это не происходит с вами:
# 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
Ответ 13
Я бы настоятельно советовал всем, кто хочет включить директивы mod_rewrite в файлах .htacces, чтобы использовать AllowOverride FileInfo
вместо того, чтобы разрешать все, как это предлагает ВСЕ ответы на этой странице. Грустно видеть, что все эти ответы используют подход "как-давно-работает-это-хорошо", а не пытаться понять последствия предлагаемого "решения". Постарайтесь понять, что вы делаете на своем сервере, и как ограничить привилегии, которые вы только что дали, с помощью AllowOverride All
. RTFM!, это совершенно ясно по этому вопросу. Давай, парни, это не ракеты, это просто веб-сервер!
Ответ 14
Старый поток, просто хочу поставить, что не устанавливайте AllowOverride для всех, вместо использования определенного мода, который вы хотите использовать,
AllowOverride mod_rewrite mod_mime
И эта строка должна быть прокомментирована
LoadModule rewrite_module modules/mod_rewrite.so
Refrences
Ответ 15
Что сработало для меня (в ubuntu):
sudo su
cd /etc/apache2/mods-enabled
ln ../mods-available/rewrite.load rewrite.load
Также, как уже упоминалось, убедитесь, что AllowOverride all
установлен в соответствующем разделе /etc/apache2/sites-available/default
Ответ 16
Используйте команду ниже
sudo a2enmod rewrite
И перезапуск apache через команду ниже
sudo service apache2 restart