Я знаю, что этот вопрос задавали несколько раз. Но я не могу заставить его работать.
Я установил Apache2 на моем сервере Ubuntu. Я также могу подтвердить, что mod_rewrite установлен с использованием phpinfo () ;. Я также поместил файл с именем .htaccess в свою корневую папку (/var/www/.htaccess). В моем файле .htaccess вставьте следующий код:
Options +FollowSymLinks RewriteEngine On RewriteRule ^.*$ test.php
Итак, все перенаправлено на test.php
Но это все еще не работает. Поэтому я проверил файл httpd.conf в файле / etc / apache2. Он полностью пуст, без строк кода (это кажется мне немного странным) ?! Однако при проверке ответов Stackoverflow в httpd.conf должен быть по крайней мере следующий код:
<Directory /> Options FollowSymLinks AllowOverride All Order deny,allow Deny from all Satisfy all </Directory>
Поэтому я вставляю этот код в httpd.conf. И перезапустил Apache с sudo /etc/init.d/apache restart
. И это все еще не работает?
Я также проверил, чтобы открыть файл / sites-enabled / 000-default и / sites-available / default, где все настройки виртуального хоста лежат и изменяются в каталоге /var/www
и /
до AllowOverride All. Mod_rewrite все еще не работает. Кто-нибудь может мне помочь, пожалуйста. Эта проблема давно выпекала мои орехи.
Кроме того, файл apache2.conf не работает. Я пытался написать что-то бессмысленное. И он по-прежнему дает мне нормальный результат вместо ошибки http 500
Все предложения от Niels Bom самые умные (я думаю). Но я бы добавил это в качестве первого предложения: попробуйте запустить и остановить apache с помощью команды Ubuntu: тогда, когда он должен быть остановлен, убедитесь, что он остановлен, т. Е. Ваша локальная страница больше не отображается.
/etc/apache2/
. Должен быть apache2.conf conf.d envvars httpd.conf mods-available mods-enabled ports.conf sites-available sites-enabled
mods-enabled
где вы найдете, если моды включены, если это так, то вы можете продолжить, иначе взгляните на другие ответы о включении modrewrite sites-enabled
: здесь вы можете найти сайты, которые … (угадайте, что?) включены. Должен быть веб-сайт по default
. <virtualhost>
– </virtualhost>
(конечно). Пожалуйста, расскажите мне, что происходит, и я был бы рад соответствующим образом обновить свой вопрос.
если вы запустите эту команду,
sudo a2enmod rewrite
ubuntu будет выводить, если он активирован или уже запущен.
Поскольку этот поток занимает очень высокое место в google, здесь другое решение:
ЧТО ПРИНИМАЕТ ПРОБЛЕМУ?
Это вызвано тем, что стандартное определение в apache просто блокирует все .htaccess. Seriouslsy. Это, по-видимому, исходное состояние в Ubuntu 12.04 LTS.
РЕШЕНИЕ
В / etc / apache2 / sites-available / default (это файл, а не папка) есть блок кода, например
<Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride XXXXXXXXXXXXXXXXXXX Order allow,deny allow from all </Directory>
Здесь вы должны изменить
AllowOverride None
в
AllowOverride All
ВАЖНЫЙ
Вы должны сделать эти изменения с правами sudo, иначе Ubuntu не сохранит файл. После RESTART ваш файл .htaccess должен работать. Чтобы проверить .htaccess, просто поместите в него какой-то бессмысленный текст и перейдите на localhost или 127.0.0.1 -> Если вы видите «внутреннюю ошибку сервера»: voila! Удалите ерунду, и вы готовы к работе.
Хорошо, давайте проверим предположения:
Положите вздор в свои конфигурационные файлы Apache (и перезапустите Apache, чтобы они вступили в силу), делает ли Apache «жаловаться» на перезапуск? Затем он пытается загрузить эти файлы. Попробуйте это для каждого конфигурационного файла Apache, который вы можете найти. Теперь у вас есть полный список загружаемых файлов конфигурации Apache.
поместите вздор в ваш htaccess, перезагрузите страницу, вы получите ошибку 500? Если нет, то htaccess не загружается.
Поместите самый базовый оператор mod_rewrite в htaccess:
Опции + FollowSymLinks RewriteEngine On RewriteRule ^. * $ Test.html
Это должно переписать каждый запрос test.html.
Попробуйте это и дайте нам результаты.
Проверьте /etc/apache2/apache2.conf
В вашем вопросе вы упомянули,
Кроме того, файл apache2.conf не работает. Я пытался написать что-то бессмысленное. И он по-прежнему дает мне нормальный результат вместо ошибки http 500
Поэтому, прежде чем публиковать больше материалов для тестирования с .conf-файлами,
запустить strace -o somefilename.txt sudo /etc/init.d/apache restart
strace – трассировка системных вызовов и сигналов: strace (1) – справочная страница Linux .
Часть -o somefilename.txt
помещает вывод strace
в somefilename.txt
. Откройте текстовый файл и выполните поиск httpd.conf
. Вы должны иметь возможность видеть код, похожий на:
stat("/etc/httpd/conf/httpd.conf", {st_mode=S_IFREG|0644, st_size=35894, ...})=0 open("/etc/httpd/conf/httpd.conf", O_RDONLY|O_CLOEXEC) = 3
Путь к httpd.conf
будет заменен на путь к вашему умолчанию httpd.conf
Если вы его найдете, откройте этот httpd.conf
и внесите в него изменения. Else, httpd.conf
не загружается.
Если это так, попробуйте:
sudo /etc/init.d/apache -f /path/to/httpd.conf start
Кроме того, проверьте NameVirtualHost *:80
и убедитесь, что он не комментируется.