mod_rewrite возвращает 302 найденных - PullRequest
1 голос
/ 07 ноября 2010

У меня есть Apache 2.2, и я использую mod_rewrite.Моя цель - перенаправить трафик с http://localhost:80/AA на http://localhost:8090/BB. Поэтому у меня есть простое правило

RewriteRule http://localhost:80/AA http://localhost:8090/BB

Моя проблема в том, чтоклиент получает "302 найдено".Я надеялся, что RewriteRule перенаправит трафик с AA на BB и, наконец, BB отправит ответ моему клиенту.

Есть ли проблема с моей конфигурацией?

Ответы [ 3 ]

1 голос
/ 07 ноября 2010

См. Документацию для RewriteRule

Что вы хотите сделать, это добавить флаг R для вашего правила для перенаправления.

RewriteRule http://localhost:80/AA http://localhost:8090/BB [R=permanent,L]

L для последнегоправить.

0 голосов
/ 08 ноября 2010

Если вы хотите перенаправить трафик, я думаю, mod_rewrite не может этого сделать. Желательно использовать mod_proxy: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypassreverse

Пример из документации:

ProxyRequests Off

<Proxy *>
   Order deny,allow
  Allow from all
</Proxy>

ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar
0 голосов
/ 07 ноября 2010

Левая сторона или шаблон вашего RewriteRule должен быть просто именем файла, которому вы хотите соответствовать, например, ^/AA$.Если вы также хотите убедиться, что хост и порт соответствуют определенным значениям, вы должны настроить RewriteCond для соответствия %{HTTP_HOST} и %{SERVER_PORT}.Однако последнее может быть ненужным, если ваш веб-сервер не настроен для нескольких доменов и портов.

Это не проверено, но что-то вроде этого:

RewriteCond %{HTTP_HOST}   ^localhost
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^/AA$          http://localhost:8090/BB

Я бы порекомендовал вам попробовать именно этосначала:

RewriteRule ^/AA$          http://localhost:8090/BB

и добавьте RewriteCond, если они вам нужны.

Редактирование на основе комментариев : Если вы пытаетесь избежать ответа "302", выне может сделать это для ситуации, которую вы описываете.Когда вы используете mod_rewrite для перенаправления с одного хоста на другой, вы получите два ответа, отправленных в ваш браузер.Первый - 302, который говорит браузеру перейти ко второму URL.Второй ответ должен быть 200.

С mod_rewrite вы можете избежать перенаправления в середине, если перезапись происходит с одной страницы на другую на том же сервере и порту .В этом случае перезапись является внутренней, и веб-сервер может ответить страницей BB, даже если запрос относится к AA.Если вы используете другой сервер или порт, веб-сервер для AA не имеет доступа к странице BB, поэтому он отвечает перенаправлением на сервер, который имеет доступ.

Если вы можете перенастроить свой сайт наиспользуйте один и тот же порт для AA и BB, вы можете заставить его работать.Если нет, я думаю, что вы могли бы делать то, что вы хотите с mod_proxy .Я никогда не использовал mod_proxy, поэтому я не уверен, что вам нужно будет сделать.

...