Переадресация страницы обслуживания с помощью htaccess не работает для прокси-материала - PullRequest
2 голосов
/ 18 ноября 2011

Я проверил Интернет и затрудняюсь понять, почему правила перенаправления и перезаписи моей страницы обслуживания не работают ни для какого прокси-материала или чего-либо, что встречается через https.

Я использую Apache2.2.3 сервер с установленным tomcat 6.0.24.

У меня есть следующий файл htaccess:

Options +FollowSymlinks
RewriteCond %{REQUEST_URI} !/maintenance.html
RewriteCond %{REQUEST_URI} !/images/(.*)$
RewriteCond %{REQUEST_URI} !/scripts/(.*)$
RewriteCond %{REQUEST_URI} !/styles/(.*)$

RewriteCond %{REMOTE_ADDR) !^123.456.789.100

RewriteRule $ /maintenance.html [R=302,L]

Он перенаправляет все мои http-страницы на страницу обслуживания и все моиизображения, сценарии и стили работают правильно.Однако он не перенаправляет никакие https-страницы, которые проксируются с другого компьютера.

Так что http://mypage.com/documents перенаправляет на обслуживание, когда https://mypage.com/users не перенаправляет.

К сожалению, пользователи являются прокси-службойкоторый живет на бэкэнд-сервере, тогда как документы являются статической страницей на сервере переднего плана.

Есть ли способ принудительно перенаправить материал прокси и / или https?Или я могу отключить mod_proxy в моем htaccess-файле, чтобы ничего не передавалось через прокси?

1 Ответ

0 голосов
/ 20 ноября 2011
  • Убедитесь, что ваш виртуальный хост SSL читает .htaccess файлы (директива AllowOverride None).
  • Избегайте .htaccess файлов, как чума. Это динамический файл конфигурации. Остальная конфигурация (в файлах apache) является статической, имеет большое значение в производительности. Но это не связано: -)
  • Некоторые директивы имеют приоритет над другими, есть приоритет в порядке выполнения . И в этой ссылке на документацию вы можете видеть, что любая директива Proxy читается перед любой директивой Directory (а .htaccess является директивой каталога sub-sub-sub-sub). Поэтому, если ваш прокси-сервер не обрабатывается тегом перезаписи мода в .htaccess (что в любом случае является плохой идеей), он применяется раньше, и есть вероятность, что ваш .htaccess никогда не будет прочитан (вы запрашиваете прокси-сервер, локального файла нет) для чтения, поэтому у Apache нет локального каталога для чтения, поэтому apache не нужно анализировать все существующие файлы .htaccess из несуществующего каталога и всех его родителей)

По решению, если вы можете редактировать реальные файлы конфигурации, это использовать перенаправление на уровне VirtualHost, а не в каталоге (или .htaccess) или местоположении. Так что это будет всегда применяться:

ErrorDocument 503 /htdocs/err/maintenance.html
## uncomment below to enter maintenance mode
RedirectMatch 503 ^/(?!err/|images/|scripts/)

Я обычно использую более простую форму с только элементами в подкаталоге / err и перенаправляю все, что не в этом подкаталоге, на ошибку 503. Затем 503 обрабатывается страницей обслуживания в этом подкаталоге err. Здесь я также добавил подкаталоги images/ и scripts/, не проверял выражение, но оно должно работать, я думаю.

...