Я знаю, как использовать Apache mod_rewrite обычным образом, но теперь я пытаюсь использовать его по-другому, что на тот момент не имело успеха. Вот что я написал:
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteCond %{lowercase:%{HTTP_HOST}} ^([^.]+)\.internal$
RewriteRule ^(.*)$ http://%1.local$1
А вот и вся история:
Я добавил две строчки в свой hosts
файл так:
127.0.0.1 test.local
127.0.0.1 test.internal
Я также добавил виртуальный хост для test.local
в моем Apache и создал файл, чтобы URL-адрес http://test.local/info.php
распечатывает конфигурацию PHP и прочее. Теперь вернемся к директивам mod_rewrite; Я надеялся, что написал то, что написал в начале публикации, когда открываю URL http://test.internal/info.php
он будет обслуживаться test.local/info.php
сценарий. Кто-нибудь может сказать мне, что я сделал не так?
Кстати, я написал данные директивы в основном файле конфигурации Apache, а не в виртуальном хосте, и я настаиваю на этом.
[ОБНОВИТЬ]
Я добавил следующие две строки в файл конфигурации Apache, чтобы я мог отлаживать Rewrite
поведение:
RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9
У меня есть пара виртуальных хостов на этой машине, которые используют Rewrite
и когда я их посещаю, из-за этих двух строк создается файл журнала по указанному пути. Но когда я приезжаю http://test.internal/info.php
файл журнала не создается.
[ОБНОВИТЬ]
Уточню свою цель, может я все делаю не так с нуля.
У меня много VPS, на каждом из которых размещается отдельный сайт. И все они находятся в локальной сети, и я хочу добавить интерфейс к этой коллекции веб-сайтов, чтобы к ним можно было получить доступ из Интернета. Но дело в том, что члены этой коллекции динамически добавляются или удаляются, поэтому я не хочу изменять конфигурационный файл моего DSN и / или обратного прокси-сервера каждый раз, когда что-то меняется. Я могу использовать подстановочный знак в DNS-сервере, чтобы направлять все запросы к определенному домену на внешний интерфейс (обратный прокси-сервер), и тогда он будет перенаправлять запрос на соответствующий VPS, используя свой поддомен (каждый поддомен логически назначен VPS). С этой целью я настрою локальный DNS, сопоставляющий некоторые фиктивные доменные имена с внутренними IP-адресами VPS. Остается только то, что обратный прокси-сервер должен переписать URL-адрес запроса, чтобы он соответствовал фиктивным доменам.
Единственная часть этого решения, которую я не могу понять, - это как указать Apache сопоставить домен входящих запросов с фиктивными!
Какие-либо предложения?
Я нашел другой способ решить свою проблему, он называется mod_proxy_express и он доступен в Apache 2.4. Он способен отображать большое количество доменов на их IP-адреса с помощью базы данных.