У меня новая версия Apache 2.2 на моей машине с Vista, все работает отлично, кроме переписывания модов.
Я не комментировал
LoadModule rewrite_module modules/mod_rewrite.s
но ни одно из моих правил перезаписи не работает, даже такие простые, как
RewriteRule not_found %{DOCUMENT_ROOT}/index.php?page=404
Все правила, которые я использую, работают на моем хостинге, поэтому они должны быть в порядке, поэтому мой вопрос, есть ли скрытая вещь в конфигурации apache, которая может блокировать перезапись модов?
apache
mod-rewrite
Якуб Арнольд
источник
источник
AllowOverride FileInfo
вместо того, чтобы разрешать все, как ВСЕ ответы на этой странице. Грустно видеть, что все эти ответы используют подход «пока все работает, все в порядке» вместо того, чтобы пытаться понять последствия предложенного «решения». Постарайтесь понять, что вы делаете на своем сервере и как ограничить привилегии, которые вы только что отдалиAllowOverride All
. RTFM! Тут вполне понятно по теме.Ответы:
Для использования
mod_rewrite
вы можете ввести следующую команду в терминале:Перезапустите apache2 после
или
или в соответствии с новым унифицированным способом управления системой
Затем, если вы хотите, вы можете использовать следующий
.htaccess
файл.Приведенный выше
.htaccess
файл (если он размещен в вашемDocumentRoot
) перенаправит весь трафик вindex.php
файл,DocumentRoot
если он не существует.Итак, допустим, у вас есть следующая структура каталогов и httpdocs является
DocumentRoot
Любой файл, который существует в httpdocs, будет передан запрашивающей стороне, как
.htaccess
показано выше, однако все остальное будет перенаправленоhttpdocs/index.php
. Ваши файлы приложений вincludes/app
не будут доступны.источник
AllowOverride All
чтобы.htaccess
файл вообще читался.a2enmod rewrite
в Windows?Для моей ситуации у меня было
в моем
.htaccess
, вместе с модулем загружается, и он не работает.Решением моей проблемы было редактирование моей записи vhost в inlcude
в
<Directory>
разделе для рассматриваемого сайта.источник
a2enmod rewrite
&RewriteEngine On
in.htaccess
- наличиеAllowOverride all
в файле VirtualHost не позволит ему работать - это то, что меняAllowOverride all
AllowOverride
Директива определяет «Тип директив, которые разрешены в.htaccess
файлах». Кроме того, «Когда эта директива установленаNone
,.htaccess
файлы полностью игнорируются. В этом случае сервер даже не будет пытаться читать.htaccess
файлы в файловой системе». Официальные документы: httpd.apache.org/docs/2.2/mod/core.html#allowoverridea2enmod rewrite
а затем в файле VirtualHosts измените «AllowOverride None» на «AllowOverride All», это должно работать. Файл VirtualHosts применяется, если вы используете несколько доменных имен на одном сервере (и IP-адрес). Вы бы настроили его для настройки домена.Попробуйте установить:
AllowOverride All
.Второй наиболее распространенной проблемой является отсутствие перезаписи мода:
a2enmod rewrite
затем перезапустите apache.источник
Если ничего из вышеперечисленного не работает, попробуйте отредактировать / etc / apache2 / sites-enabled / 000-default
почти наверху вы найдете
Изменение
AllowOverride None
ToAllowOverride All
это сработало для меня
источник
/laravel/public/authors was not found on this server
на/index.php was not found on this server
<Directory /var/www/html>
чтобы применить правило из этой папки и только вверх.В Ubuntu:
Запустить:
а потом:
mod_rewrite
теперь будет включен!источник
Есть много способов, как вы можете решить эту проблему, если вы знаете корень проблемы.
Проблема 1
Во-первых, это может быть проблема с вашим apache, у которого не установлен или не включен модуль mod_rewrite.c.
По этой причине вы должны включить его следующим образом
Откройте консоль и введите в нее:
sudo a2enmod rewrite
Перезагрузите сервер apache.
service apache2 restart
Проблема 2
Вы также можете, в дополнение к вышесказанному, если это не работает, изменить правило переопределения из файла apache conf (либо apache2.conf, http.conf, либо файл 000-default).
Найдите «Каталог / var / www /»
Измените «Переопределить Нет» на «Переопределить все»
Проблема 3
Если вы получаете сообщение о том, что модуль перезаписи не найден, то, вероятно, ваш модуль userdir не включен. По этой причине вам нужно включить его.
Введите это в консоли:
sudo a2enmod userdir
Затем попробуйте включить модуль перезаписи, если он все еще не включен (как упомянуто выше).
Чтобы узнать больше об этом, вы можете посетить этот сайт: http://seventhsoulmountain.blogspot.com/2014/02/wordpress-permalink-ubuntu-problem-solutions.html
источник
AllowOverride All
его, так как он задействует слишком много функций опасностей (например, использование сценариев perl). Вместо этого используйтеAllowOveride Options
Новая версия apache изменилась каким-то образом. Если ваша версия Apache 2.4, то вам нужно перейти на
/etc/apache2/
. Там будет файл с именемapache2.conf
. Вы должны отредактировать это (у вас должны быть права суперпользователя). Изменить текст каталога следующим образомТеперь перезапустите Apache.
Надеюсь, что это работает.
источник
Откройте терминал и введите его
a2enmod rewrite
, он включит вашmod_rewrite
модуль для Apache.Затем перейдите
/etc/apache2/sites-available
и отредактируйте файл по умолчанию. (Для этого у вас должны быть права на запись в этот файл и в папку с доступными сайтами.)Заменить ниже существующими строками с 4 по 14
Теперь перезапустите ваш Apache с помощью
/etc/init.d/apache2 restart
илиservice apache2 restart
Снова проведите тестирование чистого URL, и на этот раз оно будет пройдено.
источник
<Редактировать>
Только что заметил, что вы сказали 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. Убедитесь, что строка:
не комментируется:
Кроме того, если вы хотите включить RewriteEngine по умолчанию, вы можете добавить что-то вроде
в конец вашего файла httpd.conf.
Если нет, обязательно укажите
где-то в вашем файле .htaccess.
источник
Я только что сделал это
Затем вы должны перезапустить службу Apache, выполнив следующую команду
источник
Старый поток, просто хочу поставить, чтобы не устанавливать AllowOverride на все, вместо этого использовать конкретный мод, который вы хотите использовать,
И эта строка должна быть без комментариев
Refrences
источник
Используйте команду ниже
И перезапустите apache через команду ниже
источник
Очевидно, есть несколько способов сделать это, но я бы предложил использовать более стандартный:
источник
В первый раз, когда я боролся с правилами 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
источник
Что сработало для меня (в Ubuntu):
Также, как уже упоминалось, убедитесь, что
AllowOverride all
установлено в соответствующем разделе/etc/apache2/sites-available/default
источник