Назад | Перейти на главную страницу

Обратный прокси с использованием токена URL

У меня есть рабочий YOURLS установка, которая живет в https://example.com, у него есть набор триггеров, которые можно передать в URL.

https://example.com/this действует как перенаправление, но если вы префикс this с участием + чтобы мы получили https://example.com/+this мы получаем некоторую кастомную функцию. Аналогично, если мы добавим + до конца URL-адреса, вот так https://example.com/this+ мы можем отображать некоторую статистику и т. д.

Как бы я проксировал эти функции через поддомены, чтобы, когда https://a.example.com/this запрашивается, пользователю предоставляются те же данные, что и из https://example.com/+this но по новому URL, и когда https://b.example.com/this запрашивается, пользователь видит тот же результат, что и из https://example.com/this+?

this использует набор символов [a-zA-Z0-9]

Кажется, я никуда не денусь. я знаю это mod_rewrite здесь может помочь, что mod_proxy будет необходимо и может соответствовать регулярному выражению, и что SSLPRoxyEngine on необходимо установить, какой подход лучше всего?

Попробуйте следующее, используя mod_rewrite / mod_proxy:

RewriteEngine On

# Request https://example.com/+this
RewriteCond %{HTTP_HOST} ^(example\.com)$ [NC]
RewriteRule ^/?\+([a-zA-Z0-9]+)$ https://a.%1/$1 [P]

# Request https://example.com/this+
RewriteCond %{HTTP_HOST} ^(example\.com)$ [NC]
RewriteRule ^/?([a-zA-Z0-9]+)\+$ https://b.%1/$1 [P]

Это предполагает this состоит только из персонажей a-z, A-Z и 0-9 (обновлено с учетом комментариев). В качестве альтернативы вы можете использовать NC (NOCASE - без учета регистра) флаг на RewriteRule и укажите шаблон всего [a-z0-9]. Или, если вы готовы разрешить также подчеркивание, вы можете использовать \w сокращенный класс символов (такой же, как [A-Za-z0-9_] - «словесные» символы). Например:

RewriteRule ^/?(\w+)\+$ https://b.%1/$1 [P]

ОБНОВИТЬ: Перечитав ваш обновлено вопрос, я думаю, у меня была обратная логика! (Хотя первый сработал?) Попробуйте вместо этого следующее:

# https://a.example.com/this TO https://example.com/+this
RewriteCond %{HTTP_HOST} ^a\.(example\.com)$ [NC]
RewriteRule ^/?([a-zA-Z0-9]+)$ https://%1/+$1 [P]

# https://b.example.com/this TO https://example.com/this+
RewriteCond %{HTTP_HOST} ^b\.(example\.com)$ [NC]
RewriteRule ^/?([a-zA-Z0-9]+)$ https://%1/$1+ [P]

Если эти директивы есть в .htaccess затем RewriteRule шаблон можно немного упростить ... /? префикс можно не указывать. Так, ^/?([a-zA-Z0-9]+)$ становится ^([a-zA-Z0-9]+)$.

Обратите внимание, что эти директивы должны быть расположены в верхней части вашего .htaccess файл перед вашим «фронт-контроллером», иначе они не будут обработаны.

И при проксировании на HTTPS (протокол SSL) вам нужно будет убедиться, что SSLProxyEngine On установлен в конфигурации вашего сервера.