在PHP代码中如何在没有无限循环的情况下重定向?

在PHP代码中如何在没有无限循环的情况下重定向?,php,wordpress,redirect,Php,Wordpress,Redirect,我有两个使用多站点功能的WordPress站点,URL如下: A:sample.com B:sample.com/en 我试图按照这些条件用PHP编写代码,但当我访问a:sample.com的RUL时,浏览器(chrome)显示错误 你介意告诉我该如何解决这个问题吗 先谢谢你 访问条件 第一次访问仅限于[A:sample.com] 浏览器语言设置为日语的用户可以访问[A: [sample.com] 浏览器语言设置未设置为日语的所有用户 访问[B:sample.com/en] 浏览器中

我有两个使用多站点功能的WordPress站点,URL如下:

  • A:sample.com
  • B:sample.com/en
我试图按照这些条件用PHP编写代码,但当我访问a:sample.com的RUL时,浏览器(chrome)显示错误

你介意告诉我该如何解决这个问题吗

先谢谢你


访问条件

  • 第一次访问仅限于[A:sample.com]
  • 浏览器语言设置为日语的用户可以访问[A: [sample.com]
  • 浏览器语言设置未设置为日语的所有用户 访问[B:sample.com/en]

浏览器中的错误消息(chrome)


用于添加functions.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)

只需对代码进行以下更改:

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();
    }
}

我根据您的建议更改了代码,在浏览器中,语言设置为日语访问sample.com/ja/并使其出现404错误,在浏览器语言设置未设置为日语重定向到[B:sample.com/en]的情况下,工作正常谢谢您的帮助,是的,请共享整个代码好吗?我会再试一次。
$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();
    }
}