Как я могу перенаправить без бесконечного l oop в PHP код? - PullRequest
0 голосов
/ 18 марта 2020

У меня есть два сайта WordPress, использующие функцию нескольких сайтов, URL-адреса указаны ниже:

  • A: sample.com
  • B: sample.com/en

Я пытался написать код в PHP, следуя этим условиям, но когда я получаю доступ к правилу A: sample.com, браузер (chrome) показывает ошибку.

Не могли бы вы рассказать мне, как мне решить эту проблему?

Заранее спасибо.


условия доступа

  • Первый доступ только к [A: sample. com]
  • Пользователи, для которых в качестве языка браузера задан японский доступ к [A: sample.com]
  • Все пользователи, для которых в качестве языка браузера не задан японский доступ [B: sample.com/ ru]

Сообщения об ошибках в браузере (chrome)

This page isn’t working
sample.com redirected you too many times.
Try clearing your cookies.
ERR_TOO_MANY_REDIRECTS

Код для добавления в функциях. php

<?php
    $uri = $_SERVER['REQUEST_URI'];
    $BASE_LANG = 'en';

    if (!preg_match('/^[!-~][a-zA-Z]{2}[!-~]/', $uri)) {
        $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
        $lang = $BASE_LANG;
        if (isset($languages)) {
            $browser_lamguage = $languages[0];
            $base_languages = array('ja', 'en');

            foreach ($base_languages as $base_language) {
                if (preg_match("/^$base_language/i", $browser_lamguage)) {
                    $lang = $base_language;
                    break;
                }
            }
        }
        $url = get_site_url()."/$lang/";
        if ($lang == 'ja') {
            $url = get_site_url();
        }
        header("Location: $url");
        exit();
    }
?>

Среда разработки

  • CentOS (7 x86_64)
  • Apache (2.4.6 CentOS)
  • PHP (7.1.33)
  • wordpress (5.2.5)

1 Ответ

0 голосов
/ 18 марта 2020

Просто внесите изменения в ваш код:

if ($lang != 'ja') {
    header("Location: $url");
    exit();
}

Отредактировано:

$uri = $_SERVER['REQUEST_URI'];
$BASE_LANG = 'en';

if (!preg_match('/^[!-~][a-zA-Z]{2}[!-~]/', $uri)) {
    $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
    $lang = $BASE_LANG;
    if (isset($languages)) {
        $browser_lamguage = $languages[0];
        $base_languages = array('ja', 'en');

        foreach ($base_languages as $base_language) {
            if (preg_match("/^$base_language/i", $browser_lamguage)) {
                $lang = $base_language;
                break;
            }
        }
    }
    $url = get_site_url()."/$lang/";
    if ($lang != 'ja') {
        header("Location: $url");
        exit();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...