Nano Hash - криптовалюты, майнинг, программирование

Условное перенаправление не работает в другом состоянии

У нас есть старый URL-адрес, который мы хотим перенаправить через PHP в новое место. (Пожалуйста, никаких лекций о том, является ли это лучшим способом сделать это; это то, что было решено.)

Если пользователь переходит на http://oldurl.com, мы хотим перенаправить на http://newurl.com. Если они перейдут на http://oldurl.com/locations/illinois/12345 (или любой другой основанный на местоположении URL этого формата), мы хотим перенаправить на http://newurl.com/locations/illinois/ 12345.

<?php
$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segments = explode('/', $_SERVER['REQUEST_URI_PATH']);


if(is_array($segments) && in_array("locations", $segments)) {
    header('Location: http://newurl.com/locations/' . $segments[2] . '/' . $segments[3]);
}
else {
    header('Location: http://newurl.com');
}

Условие if работает — оно перенаправляет на динамически созданный URL. Но когда пользователь переходит на http://oldurl.com, вместо выполнения условия else и перенаправления на http://newurl.com, остается исходный URL и отображается пустая страница.

Есть идеи, почему?

30.12.2015

  • Попробуйте посмотреть журнал ошибок. Пустая страница обычно означает ошибку 500, и что-то будет записано в журнал ошибок. 30.12.2015
  • пустая страница может означать ошибки. php.net/manual/en/function.error-reporting.php - используйте это и для регистрации или отображения, затем вернитесь и сообщите нам, что это такое, если есть ошибка. 30.12.2015
  • var_dump($segments); на вашей странице. И посмотрите, есть ли у вас что-нибудь в разделе $_SERVER['REQUEST_URI'] на главной странице. 30.12.2015
  • Что странно - в логе ошибок нет. И я уже повторил $segments; он содержит то, что я ожидаю от него. 30.12.2015
  • Вы пробовали делать exit после каждого header, иначе у меня это работает. Я предполагаю, что код продолжает делать другие вещи после кода, который вы показали 30.12.2015
  • @RiggsFolly - я не пробовал использовать exit; Я попробую. И нет — код ничего не делает после того, что я показал — это полный код. 30.12.2015
  • Тогда это, вероятно, не решение. 30.12.2015

Ответы:


1

Будет ли это работать?

<?php
$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$url = $_SERVER['REQUEST_URI_PATH'];
if (substr($url, 0, 7) == "http://")
$url = substr($url, 7, $url.length);

$segments = explode('/', $url, 2);

if(is_array($segments)) {
    header('Location: http://order.pizzahut.com/' . $segments[1]);
}
else {
    header('Location: http://order.pizzahut.com');
}

Вместо того, чтобы разбивать URL-адрес на несколько строк, вы можете разделить первое вхождение косой черты / после http://.

30.12.2015

2

is_array всегда будет возвращать true в этом случае, потому что путь, несмотря ни на что, даже если это корневой каталог, имеет / в начале. Это приведет к тому, что строка будет разделена следующим образом [0]/[1]

Если ваш REQUEST_URI равен /, вы получите массив с двумя элементами, которые равны "".

Это должно работать.

<?php
    $_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    $segments = explode('/', $_SERVER['REQUEST_URI_PATH']);
    if(!(count($segments) == 2) && !(in_array("", $segments))) {
        header('Location: http://order.pizzahut.com/locations/' . $segments[2] . '/' . $segments[3]);
    }
    else {
        header('Location: http://order.pizzahut.com');
    }

Если я ничего не упустил, это должно сработать.

30.12.2015
  • with 2 entries - с одной записью. "". 30.12.2015
  • is_array($segments) всегда может вернуть true в этом коде, а in_array("locations", $segments) — нет. 30.12.2015
  • @u_mulder нет, я проверил это в своем коде. Он возвращает 2 записи, потому что запрос к document_root вернет /. Это приводит к тому, что массив возвращает два результата: пустую строку до и после /. 30.12.2015
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..