Рейтинг:1

Как удалить суффикс «.com» из переменной имени хоста с помощью .htaccess

флаг ws

Я пытаюсь создать уникальную серию переадресаций на веб-сервере Apache (версия сервера: Apache/2.2.15). Используя .htaccess или дополнительные модули Apache, мне нужно полностью проанализировать запрошенные URL-адреса, чтобы извлечь имена хостов без стандартного суффикса .com.

Пример: я нуждаюсь имя поставщика от имени хоста имя поставщика.com.

Бизнес, который я поддерживаю, работает со сторонними поставщиками и создал уникальные домены верхнего уровня для каждого из них, которые указывают на подкаталог конкретного поставщика в корень документа веб-сервера.

Пример: имя поставщика.com/logo.jpg загружает актив, к которому также можно получить доступ в parentbusinessdomain.com/vendorname/logo.jpg

Это соглашение было введено бизнесом 10 или 15 лет назад, и есть много, много поставщиков. Чего бизнес не учёл, так это необходимости поддерживать реализацию HTTPS/SSL для каждого уникального домена. Если бы они использовали поддомены, такие как vendorname.parentbusinessdomain.com, тогда это не было бы проблемой. В будущем мы хотим отказаться от этого соглашения и просто размещать изображения и другие активы из https://parentbusinessdomain.com.

Проблема, с которой я постоянно сталкиваюсь, заключается в том, что, похоже, не существует стандартной строковой операции Apache или переменной на стороне сервера, которая представляет или извлекает имя хоста без конкретной строки «.com». Такое извлечение строк возможно с помощью внутреннего PHP или внешнего интерфейса Javascript, но, похоже, я ограничен тем, что может сделать сам .htaccess.

Аналогичный пример с пользовательской функцией Javascript: https://stackoverflow.com/a/16934798/602514

parseURL('https://www.facebook.com/100003379429021_356001651189146');

Результат:

Объект {
домен: "www.facebook.com",
хост: "фейсбук",
путь: "100003379429021_356001651189146",
протокол: "https",
поддомен: "www",
ТЛД: "com"
}

Непредвиденным обстоятельством будет изучение перезаписи/перенаправления URL-адресов в самом устаревшем веб-приложении, но надежда на то, что может быть более элегантное решение с точки зрения инфраструктуры.

флаг kz
Являются ли все домены одним TLD, как в ваших примерах «.com» и т. д.? Есть ли у вас какие-либо STLD, такие как `.co.uk` и т. д.?
флаг kz
На какой URL вы на самом деле ссылаетесь?
sparecycle avatar
флаг ws
@MrWhite все эти домены поставщиков .com не хотели усложнять ситуацию, предполагая, что это разные типы доменов.Что касается целевого домена, если бы мы могли просто сказать, что целевой домен — это example.com, это сохранило бы анонимность моего клиента. Заранее спасибо!
флаг kz
_Aside:_ "Этот тип извлечения строк возможен с бэкэндом PHP" - на самом деле вы сделали бы это почти так же на любом языке (PHP, JS или Apache); просмотрев заголовок `Host`. У Apache есть все инструменты. Вы бы не использовали функцию JS, такую ​​как _that_, если вы изучаете _текущий запрос_.
Рейтинг:0
флаг kz

Вы можете сделать что-то вроде следующего в верхней части вашего .htaccess файл с помощью mod_rewrite (хотя это сработает и непосредственно в конфиге сервера):

RewriteEngine включен

RewriteCond %{HTTP_HOST} !^example\.com
RewriteCond %{HTTP_HOST} ^(?:www\.)?([^.]+) [NC]
RewriteRule ^ https://example.com/%1%{REQUEST_URI} [R=302,L]

Это перенаправит <vendorname>.com/<anything> к https://example.com/<имя поставщика>/<что-либо>. Где <anything> буквально может быть любым URL-путем. Любая строка запроса также сохраняется при перенаправлении.

пример.com является «родительским бизнес-доменом». Первое условие просто проверяет, что запрос еще не для целевого домена.

%1 обратная ссылка соответствует «имени поставщика», полученному из запрошенного имени хоста имя поставщика.com в предыдущем CondPattern. Это позволяет использовать дополнительный субдомен www. Вы упомянули, что только что .com домены, хотя это будет работать с любым (многоуровневым) TLD, просто предполагая, что нет других поддоменов (за исключением необязательного www).

Сначала протестируйте переадресацию 302 (временную) и измените ее на 301 (постоянную) — если это намерение — после того, как вы подтвердите, что она работает должным образом.

Чего бизнес не учёл, так это необходимости поддерживать реализацию HTTPS/SSL для каждого уникального домена.

Просто любопытно, как перенаправление решает это? Является ли перенаправление только для сохранения SEO и любых сторонних обратных ссылок, которые относятся к URL-адресам формы http://vendorname.com/logo.jpg (только HTTP)? (Хотя обычно вы не ожидаете, что обратные ссылки логотип.jpg и этот конкретный пример не очень помогает SEO?)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.