У меня есть рабочий 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
установлен в конфигурации вашего сервера.