在PHP代码中如何在没有无限循环的情况下重定向?
我有两个使用多站点功能的WordPress站点,URL如下:在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] 浏览器中
- A:sample.com
- B:sample.com/en
访问条件
- 第一次访问仅限于[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();
}
}