Правила переписывания на сервере Apache: как избежать "неявного принудительного перенаправления (rc=302)"?

У меня очень раздражающая проблема:

наш веб-сервер обрабатывает 2 (на самом деле, но скажем, 2 для более простого примера):

  • pretassur.fr
  • pretassuragentimmobilier.fr

Вот что я хочу сделать: изменить

(whatever1).pretassuragentimmobilier.fr(/whatever2)

в

(whatever1).pretassur.fr(/whatever2)?theme=agentimmobilier

Итак, вот мое переписывание:

RewriteCond %{SERVER_NAME} (([a-z]+\.)*)pretassuragentimmobilier.(fr|com)
RewriteRule   ^(.+)        http://%1pretassur.fr$1 [E=THEME:pretassur_agent,QSA]
# if THEME not empty, set it :
RewriteCond   %{ENV:THEME} ^(.+)$
RewriteRule (.*) $1?IDP=%{ENV:THEME} [QSA]

Большая (огромная) проблема: давайте посмотрим на логи переписывания:

[pretassurmandataireimmo.com] (5)
=> setting env variable 'THEME' to 'pretassur_mandataire'
[pretassurmandataireimmo.com]
=> (2) implicitly forcing redirect (rc=302) with http://pretassur.fr/

Aaaaaaaaarg! "неявное принудительное перенаправление" => Я не хочу этого! Я хочу внутренне перенаправить на pretassur.fr, а не делать реальное перенаправление!

Теперь, если вы введете: http://pretassurmandataireimmo.com/ он будет перенаправлен на http://pretassur.fr/?IDP=pretassur_mandataire (попробуйте), я не хочу этого! Я хочу отобразить эту страницу http://pretassur.fr/?IDP=pretassur_mandataire но не касаясь оригинального хоста!

Любая идея?

Большое спасибо!

1 ответ

Решение

Даже если они находятся на одном сервере, вы не можете выполнять внутренние перенаправления между двумя различными vhosts. Отсюда внешний (302) редирект.

Чтобы выполнить то, что вы хотите, вы можете использовать опцию "'proxy|P' (force proxy)".

Другие вопросы по тегам