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

1

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

Вот пример:

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

PHP-скрипт находится в папке "перенаправления" и, допустим, перенаправляет вышеуказанную ссылку на 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 в правильном направлении?

Теги:
dns
.htaccess
redirect
cname

2 ответа

3

Важным отличием является то, что 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/somethingelse.html), который показывает браузер клиента.

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

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

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

1

Если вы хотите сделать это с помощью 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 у вас есть возможность запросить базу данных для правильного перенаправления.

  • 0
    Это отличное направление, о котором я раньше не думал! Большое спасибо, приятель!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню