Правило перезаписи Apache

Я хочу перенаправить "http://localhost/b.html" --> "http://localhost/a.html" Для этого я попробовал RewriteRule. Но почему-то у меня не работает.

Я использую apache2, и мой httpd.conf содержит:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule rewrite_module modules/mod_rewrite.so

RewriteEngine On
RewriteRule ^/b.html$ http://localhost/a.html

Когда я запускаю "http://localhost/a.html", он показывает мне веб-страницу. Но когда я перехожу к "http://localhost/b.html", apache2/error_log говорит "файл не существует : b.html" Отсутствует ли какой-либо параметр для включения rewrite_module?


person ashweta    schedule 16.04.2009    source источник


Ответы (4)


Проблема в вашем RewriteRule. это должно работать:

RewriteEngine On
RewriteRule ^/b.html$ /a.html [L]
  1. соответствие правилу (^b.html$) не должно включать начальную косую черту. (это работает в .htaccess, но не в конфигурации сервера)
  2. цель перезаписи должна быть относительным URI, если это возможно (т.е. на том же хосте)
  3. правило должно заканчиваться директивой "что делать" - в этом случае [L]eave processing (больше правила обрабатываться не будут)
person Piskvor left the building    schedule 16.04.2009
comment
Кроме того, когда вы отлаживаете перезаписи, проще поместить правила в .htaccess в DocumentRoot — тогда не нужно перезапускать сервер. - person Piskvor left the building; 16.04.2009
comment
1. для .htaccess - когда вы находитесь в .conf, вам нужен / 2. согласен 3. Вам это не нужно - наличие [L], когда это уже последнее правило, ничего не делает - person Greg; 16.04.2009
comment
+1 Не знаю, почему за это проголосовали. [L] не является строго обязательным для последнего правила в файле, но в любом случае это хорошая практика (так что вам не нужно помнить, чтобы вставить его при добавлении нового правила) - person cletus; 16.04.2009

Вы проверили, есть ли в вашем файле конфигурации Apache (скорее всего, httpd.conf) директива для раздела Alias ​​или VirtualHost:

AllowOverride All

У меня была та же проблема, когда modrewrite не работал, потому что я его отключил:

AllowOverride None

Удачи.

person Community    schedule 16.04.2009

У вас есть это в разделе виртуального хоста?

<VirtualHost *:80>
    RewriteEngine On
    RewriteRule ^/b.html$ /a.html
</VirtualHost>
person Greg    schedule 16.04.2009

Теперь это работает. Пришлось сделать две вещи:

  1. Измените «AllowOverride None» в /etc/apache2/sites-available/default на «AllowOverride All».

  2. Поместите правило перезаписи в /var/www/.htaccess вместо httpd.conf

Я не уверен, почему это не работает в httpd.conf. Но это работает после выполнения двух вышеуказанных вещей.

person ashweta    schedule 16.04.2009
comment
Я именно так и ответил ;-) - person ; 16.04.2009