.htaccess — Как обнаружить входящий запрос (с помощью скрипта PHP) с субдомена CNAME?

У нас есть простое приложение перенаправления на основе php.

Вот пример:

spiderman.com/redirection/redirect-to-marvel/

Скрипт php находится в папке «redirection» и, допустим, он перенаправит вышеуказанную ссылку на marvel.com

СЕЙЧАС…

Что делать, если я хочу создать совершенно другой поддомен под названием try.superman.com который перенаправляет с использованием CNAME spiderman.com/redirection/ так что если я открою этот URL:

try.superman.com/redirect-to-marvel/ это будет на самом деле вперед spiderman.com/redirection/redirect-to-marvel/ который, конечно, направит его marvel.com

Короче говоря, браузер покажет try.superman.com/redirect-to-marvel/ (из-за CNAME), но как мне на стороне сервера обнаружить входящий запрос из записи CNAME и направить его на правильный локальная папка?

Просто нужно какое-то направление здесь …

PHP-dns_get_record + htaccess правильное направление?

1

Решение

Важное отличие заключается в том, что CNAME и перезапись / перенаправление (или vhost) — это совершенно разные вещи, которые часто путают.

CNAME — это сущность DNS, поэтому у вас может быть несколько имен, указывающих на отдельный адрес. Например, bob.example.com — это хост с 1.2.3.4. Затем вы можете создать CNAME для alice.example.com, который указывает на bob для разрешения DNS и возвращает тот же IP-адрес.

Перенаправление — это HTTP-метод для получения запроса, который попадает в определенное место (http://bob.example.com/index.html) и возвращает инструкцию в браузер, чтобы перейти в другое место (http://alice.example.com/somewhereelse.html), который показывает браузер клиента.

Перезапись — это метод HTTP, который принимает запрос, который попадает в определенное место, изменяет его и затем отправляет на автоответчик, не обязательно сообщая браузеру клиента о его получении.

Виртуальный хост (vhost и т. Д. … существуют разные имена для одной и той же функции) — это метод HTTP, который позволяет по-разному отвечать на запрос, просматривая имя, используемое в запросе, часто проверяя заголовок узла HTTP. это включено в каждый запрос. Возьмем, к примеру, выше: клиентские запросы http://alice.example.com, который разрешается через DNS к 1.2.3.4, потому что Алиса является CNAME для bob.example.com. Запрос попадает на тот же IP-адрес, 1.2.3.4, но веб-сервер, который там работает, отвечает на запрос с содержимым в / alice вместо / bob.

надеюсь, это поможет

3

Другие решения

Если вы хотите сделать это с помощью PHP, обычно вы настраиваете свой веб-сервер так, чтобы он обслуживал все дочерние домены для определенного виртуального хоста, который выполняет все запросы через PHP-скрипт маршрутизации, который выполняет перенаправление. Что-то вроде этого:

<?php
$map = array(
"try.superman.com" => array(
"/redirect-to-marvel/" => "http://spiderman.com/redirection/redirect-to-marvel/",
),
);
if (isset($map[$_SERVER["HTTP_HOST"]]) {
if (isset($map[$_SERVER["HTTP_HOST"]][$_SERVER["REQUEST_URI"]])) {
header("Location: " . $map[$_SERVER["HTTP_HOST"]][$_SERVER["REQUEST_URI"]]);
exit;
}
}
header("Location: http://spiderman.com/404.php");

Существует много возможностей для импровизации, включая выполнение всего этого только с помощью mod_rewrite (или эквивалента вашего веб-сервера, но я предполагаю, что вы используете Apache здесь, так как вы упоминаете .htaccess).

С PHP у вас есть возможность запросить базу данных для правильного перенаправления.

1

По вопросам рекламы [email protected]