Форум программистов, компьютерный форум, киберфорум
Apache, htaccess
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 0
Регистрация: 14.09.2018
Сообщений: 56

Настроить RewriteRule для замены хоста в *чужих* URL

14.09.2018, 16:44. Показов 1623. Ответов 3

Студворк — интернет-сервис помощи студентам
Есть Домашнийкомпьютер с Windows 7 SP 1Rus 64 bit.

На нём локально на 127.0.0.1:80 установлен Apache. Своего сайта на компьютере НЕТ.

Требуется сделать из Apache прокси, который делает так:

1) Все URL'ы из браузера, кроме нескольких чужих хостов, открываются так, будто бы никакого Apache нет.
2) Для заданных хостов выполняется замена одного чужого хоста на другой, путь к файлу остаётся прежний.
Хосты заданы в виде IP, поэтому DNS или hosts отпадают.
3) Прокси нужен только для браузера.

Сделал
1) Поставил браузеру в качестве прокси 127.0.0.1:80
2) В httpd.conf написал

Code
1
2
3
4
5
6
7
8
9
<IfModule mod_rewrite>
 
RewriteEngine On
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
 
</IfModule>
Однако получаю ошибку 404, видимо, Apache обращается к локальным файлам.

Вопросы:
1. Что я делаю не так?
2. Есть ли какая переменная для протокола, чтобы задать в одном правиле и http, и https ?

P.S. SQUID не предлагать, для него URL rewrite - отдельный модуль, которого под Windows, похоже, что нет.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.09.2018, 16:44
Ответы с готовыми решениями:

Настроить RewriteRule для автоматической авторизации на *чужом* https-сервере
На компьютере с windows 7 sp1 64bit Rus на 127.0.0.1:80 запущен Apache 2.4. RewriteRule меняет локальный URL на URL файла на неком...

RewriteCond влияет толко для один, следушчи RewriteRule. можно как-то превишать количество RewriteRule
здраствуите, вот что интересно, сделаю mod_rewrite и для етого в .htaccess фаиле пишу RewriteEngine On RewriteCond...

RewriteRule меняет url
Привет! хочу сделать RewriteRule с поддомена на порт, юзаю: Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST}...

3
2 / 2 / 0
Регистрация: 14.09.2018
Сообщений: 56
15.09.2018, 18:33  [ТС]
Никто не хочет отвечать, поэтому отвечу себе сам для тех, кто зайдёт сюда через поиск с аналогичной проблемой.

Теперь всё работает. Для этого в httpd.conf нужно было:

1) задать имена модуля для перезаписи URL не mod_rewrite, а rewrite_module

2) загрузить его - раскомментировать строчку LoadModule rewrite_module modules/mod_rewrite.so. В результате имеем бесконечную рекурсию редиректов. Чтобы избавиться от них, нужно спихнуть URL во встроенный прокси, для чего надо

3) исправить правило на RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [QSA,END,P]. В результате имеем ошибку "500 Internal Server Error", поэтому надо

4) раскомментировать строчки

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so


В результате исправлено в httpd.conf

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
 
<IfModule rewrite_module>
 
RewriteEngine On
 
RewriteCond %{HTTP_HOST} x\.x\.x\.x
RewriteRule (.*) http://y.y.y.y%{REQUEST_URI} [QSA,END,P]
 
RewriteCond %{HTTP_HOST} z\.z\.z\.z
RewriteRule (.*) http://t.t.t.t%{REQUEST_URI} [QSA,END,P]
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [QSA,END,P]
 
</IfModule>
где x.x.x.x -> y.y.y.y, z.z.z.z -> t.t.t.t - пары IP-адресов для замены. Таких для каждой замены должна быть своя пара строчек RewriteCond / RewriteRule. Обратите внимание, что в RewriteCond перед точками в IP-адресе ставится обратный слеш, а в RewriteRule - нет

Перезапускаем apache - и наслаждаемся

Добавлено через 4 часа 49 минут
Никто не хочет отвечать, поэтому отвечу себе сам для тех, кто зайдёт сюда через поиск с аналогичной проблемой.

Теперь всё работает. Для этого в httpd.conf нужно было:

1) задать имена модуля для перезаписи URL не mod_rewrite, а rewrite_module

2) загрузить его - раскомментировать строчку LoadModule rewrite_module modules/mod_rewrite.so. В результате имеем бесконечную рекурсию редиректов. Чтобы избавиться от них, нужно спихнуть URL во встроенный прокси, для чего надо

3) исправить правило на RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [QSA,END,P]. В результате имеем ошибку "500 Internal Server Error", поэтому надо

4) раскомментировать строчки

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so


5) чтобы при адресе 127.0.0.1 или localhost не зацикливалось, а показывалась страница Апача, в начало секции rewrite_module добавляем правило

RewriteCond %{HTTP_HOST} 127\.0\.0\.1 [OR]
RewriteCond %{HTTP_HOST} localhost [NC]
RewriteRule (.*) %{REQUEST_URI} [QSA,L]


В результате исправлено в httpd.conf

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
 
<IfModule rewrite_module>
 
RewriteEngine On
 
RewriteCond %{HTTP_HOST} 127\.0\.0\.1 [OR]
RewriteCond %{HTTP_HOST} localhost [NC]
RewriteRule (.*) %{REQUEST_URI} [QSA,L]
 
RewriteCond %{HTTP_HOST} x\.x\.x\.x
RewriteRule (.*) http://y.y.y.y%{REQUEST_URI} [QSA,END,P]
 
RewriteCond %{HTTP_HOST} z\.z\.z\.z
RewriteRule (.*) http://t.t.t.t%{REQUEST_URI} [QSA,END,P]
 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [QSA,END,P]
 
</IfModule>
где x.x.x.x -> y.y.y.y, z.z.z.z -> t.t.t.t - пары IP-адресов для замены. Таких для каждой замены должна быть своя пара строчек RewriteCond / RewriteRule. Обратите внимание, что в RewriteCond перед точками в IP-адресе ставится "", а в RewriteRule - нет

Перезапускаем apache - и наслаждаемся

Примечания: (3 шт.)
1. НЕ обязательно заменять каждый входной IP на уникальный выходной. Можно несколько входных или даже все заменить на один выходной. Например, так:
Code
1
2
3
4
RewriteCond %{HTTP_HOST} x\.x\.x\.x [OR]
RewriteCond %{HTTP_HOST} y\.y\.y\.y [OR]
RewriteCond %{HTTP_HOST} z\.z\.z\.z
RewriteRule (.*) http://t.t.t.t%{REQUEST_URI} [QSA,END,P]
Здесь каждый из адресов x.x.x.x, y.y.y.y, z.z.z.z заменяется на t.t.t.t

2. НЕ обязательно заменять IP на другой IP, можно и на имя домена. Или организовать замену домен X -> домен Y, хотя лучше делать это через hosts. Менять домены через Апач, на мой взгляд, нужно если их много и выходное имя можно как-то вычислить из входного.

3. Можно менять не только домены, а вообще весь URL, как вам угодно - всё в ваших руках.
0
0 / 0 / 0
Регистрация: 15.09.2018
Сообщений: 2
15.09.2018, 18:35
Здравствуйте.
Подскажите, вы программист?
0
2 / 2 / 0
Регистрация: 14.09.2018
Сообщений: 56
07.10.2018, 11:40  [ТС]
Маленькое уточнение - чтобы заходило на адреса из одного доменного имени, добавить перед последним правилом

Code
1
2
RewriteCond %{REQUEST_URI} "/"
RewriteRule (.*) http://%{HTTP_HOST} [QSA,END,P]
И для тех, кто не догадался - можно перенаправлять целые подсети, например, так

Code
1
2
RewriteCond %{HTTP_HOST} x\.x\.*
RewriteRule (.*) http://y.y.y.y%{REQUEST_URI} [QSA,END,P]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.10.2018, 11:40
Помогаю со студенческими работами здесь

RewriteRule при разных url
Подскажите пожалуйста, Есть страницы 2уровня и для них: RewriteRule ^(.*).html$ index.php?p=$1 И есть 3-его, для него. ...

Директива RewriteRule и параметры в url
Можно ли использовать в .htaccess такой код RewriteEngine on RewriteRule ^list/(*)/$ /list.php?category=$1 RewriteRule...

Изменение части url через .htaccess (RewriteRule)
Доброго времени суток! Уже битый день борюсь с .RewriteRule и пока тщетно. Коротко: Мне необходимо преобразовать часть строки...

.htaccess настроить гибкую RewriteRule
Пусть есть сайт вида &quot;site.com&quot;. Его страницы, доступные по адресу &quot;site.com/a/qwerty&quot; и &quot;site.com/b/qwerty&quot; разные, но файла...

Где указывать имя хоста в Url'e для jdbc ?
java:/MyHost/comp/env/jdbc/MyBase или java:/comp/env/jdbc/MyHost/MyBase не работает ... куды ж его писать ???


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru