2009-04-16 4 views
3

Я хочу перенаправить «http://localhost/b.html» -> «http://localhost/a.html» Я попробовал RewriteRule для этого. Но почему-то это не работает для меня.Правило перезаписи Apache

Я использую 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" Это показывает мне веб-страницы. Но когда я triend «http://localhost/b.html» apache2/error_log говорит «файл не существует: b.html» Не хватает ли какой-либо настройки для включения rewrite_module?

+0

Вы перезапустили Apache, не так ли? – Greg

ответ

5

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

RewriteEngine On 
RewriteRule ^/b.html$ /a.html [L] 
  1. матч правило ( ^b.html$) не должен включать в себя начальный слеш. (это работает в .htaccess, но не в конфигурации сервера)
  2. цель переписывания должен быть относительным URI, если это возможно (то есть на том же хосте)
  3. правило должно заканчиваться директивой «что делать», - в этом случае [L] обработка карниза (не более правил будет обработана)
+1

Кроме того, когда вы отлаживаете перезаписывание, проще вставлять правила в .htaccess в DocumentRoot - тогда не нужно перезапускать сервер. – Piskvor

+2

1. для .htaccess - когда вы в .conf, вам нужно/2. согласилось 3. Вам это не нужно - имея [L], когда это уже последнее правило ничего не делает – Greg

+1

+1 Не знаете, почему это было приостановлено. [L] строго не требуется для последнего правила в файле, но это хорошая практика иметь его в любом случае (так что вам не нужно запоминать его, когда вы добавляете новое правило) – cletus

1

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

<VirtualHost *:80> 
    RewriteEngine On 
    RewriteRule ^/b.html$ /a.html 
</VirtualHost> 
3

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

AllowOverwrite All 

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

AllowOverwrite None 

Удачи.

1

Это работает сейчас. Пришлось делать две вещи:

  1. Изменить "AllowOverride None" в/и т.д./apache2/сайтов-доступных/по умолчанию для "AllowOverride All".

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

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

+1

Это именно то, что я ответил ;-) – 2009-04-16 14:42:54

Смежные вопросы