質問編集履歴
7
レイアウト調整
title
CHANGED
File without changes
|
body
CHANGED
@@ -5,9 +5,8 @@
|
|
5
5
|
|
6
6
|
2つのURLを用意し、最初のアクセスに利用するドメインは、Aのsample.comのみで、アクセス元やブラウザーの条件によって、A、Bへアクセスが変わるようにしたいです。
|
7
7
|
|
8
|
+
どのような、コードに修正すれば良いかご教授いただけないでしょうか?
|
8
9
|
|
9
|
-
|
10
|
-
どのような、コードに修正すれば良いかご教授いただけないでしょうか?
|
11
10
|
---
|
12
11
|
追記②
|
13
12
|
オリジナルのサンプルコードに近い形で修正しましたが、こちらでも無限ループのエラーとなります。
|
6
追記記入
title
CHANGED
File without changes
|
body
CHANGED
@@ -8,9 +8,38 @@
|
|
8
8
|
|
9
9
|
|
10
10
|
どのような、コードに修正すれば良いかご教授いただけないでしょうか?
|
11
|
+
---
|
12
|
+
追記②
|
13
|
+
オリジナルのサンプルコードに近い形で修正しましたが、こちらでも無限ループのエラーとなります。
|
14
|
+
```ここに言語を入力
|
15
|
+
$uri = $_SERVER['REQUEST_URI'];
|
16
|
+
$BASE_LANG = 'en';
|
11
17
|
|
18
|
+
if (!preg_match('/^[!-~][a-zA-Z]{2}[!-~]/', $uri)) {
|
19
|
+
$languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
|
20
|
+
$lang = $BASE_LANG;
|
21
|
+
if (isset($languages)) {
|
22
|
+
$browser_lamguage = $languages[0];
|
23
|
+
$base_languages = array('ja', 'en');
|
12
24
|
|
25
|
+
foreach ($base_languages as $base_language) {
|
26
|
+
if (preg_match("/^$base_language/i", $browser_lamguage)) {
|
27
|
+
$lang = $base_language;
|
28
|
+
break;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
$url = get_site_url()."/$lang/";
|
33
|
+
if ($lang == 'ja') {
|
34
|
+
$url = get_site_url();
|
35
|
+
}
|
36
|
+
header("Location: $url");
|
37
|
+
exit();
|
38
|
+
}
|
39
|
+
|
40
|
+
```
|
41
|
+
---
|
13
|
-
追記
|
42
|
+
追記①
|
14
43
|
下記にこれまで試したコードを記載していますが、こちらのコード⑤が、最も希望に近い動きになるので、こちらのコードを変更して対応したいと思っています。
|
15
44
|
|
16
45
|
|
@@ -83,7 +112,7 @@
|
|
83
112
|
参考サイト:[①日本語と、②日本語以外の、2つの条件で振り分けるPHPのコードを知りたい](https://teratail.com/questions/247687)
|
84
113
|
結果:
|
85
114
|
日本語設定でアクセス → A:sample.comで表示される
|
86
|
-
英語設定でアクセス → B:sample.com/enに、リダイレクトされるが、
|
115
|
+
英語設定でアクセス → B:sample.com/enに、リダイレクトされるが、ブラウザで無限ループのエラーとなる
|
87
116
|
|
88
117
|
|
89
118
|
コード②
|
5
内容編集
title
CHANGED
File without changes
|
body
CHANGED
@@ -5,31 +5,52 @@
|
|
5
5
|
|
6
6
|
2つのURLを用意し、最初のアクセスに利用するドメインは、Aのsample.comのみで、アクセス元やブラウザーの条件によって、A、Bへアクセスが変わるようにしたいです。
|
7
7
|
|
8
|
-
もともとは、下に紹介している②のコードを改良して利用したく、[teratailの他のページで質問でさせてもらっていました](https://teratail.com/questions/247687)が、改良する前でもうまく動かない事がわかり、今回の新しい質問として出させてもらっています。
|
9
8
|
|
10
|
-
②のコードに加えこれまで、以下のコードで試しましたがどれもうまく動作してくれません。
|
11
9
|
|
12
10
|
どのような、コードに修正すれば良いかご教授いただけないでしょうか?
|
13
11
|
|
14
|
-
*PHP言語の経験はなく、必要な箇所のみ変更して、サンプルコードをほぼコピペする形で使用したいと考えています。
|
15
12
|
|
16
|
-
これまでに試したコード
|
17
|
-
使用するブラウザはchromeで、[こちらの方法で言語の設定をしています](https://aprico-media.com/posts/3359)
|
18
|
-
|
19
13
|
追記
|
20
|
-
こちらのコード⑤が、最も希望に近い動きになるので、こちらのコードを変更して対応したいと思っています。
|
14
|
+
下記にこれまで試したコードを記載していますが、こちらのコード⑤が、最も希望に近い動きになるので、こちらのコードを変更して対応したいと思っています。
|
21
15
|
|
22
|
-
- 日本語設定でアクセス → sample.com/ja/へ、リダイレクトが、→ sample.com/になる
|
23
|
-
- 日本語以外の言語設定 → sample.com/en/へ、リダイレクトされる
|
24
|
-
動きにしたいです。
|
25
16
|
|
17
|
+
下記のようにコードを編集しましたが、ブラウザでアクセスした際にエラーがでます。
|
18
|
+
This page isn’t working
|
19
|
+
sample.com redirected you too many times.
|
20
|
+
Try clearing your cookies.
|
21
|
+
ERR_TOO_MANY_REDIRECTS
|
26
22
|
|
23
|
+
該当のソースコード
|
24
|
+
|
25
|
+
functions.phpに追加したコードは以下のとおりです。
|
26
|
+
```ここに言語を入力
|
27
|
+
// ユーザーの言語に合わせてリダイレクトする。
|
28
|
+
$uri = $_SERVER['REQUEST_URI'];
|
29
|
+
$url = get_site_url();
|
30
|
+
//無限ループが起こらないようにするために、/と/en/にマッチしないときのみに以下の処理を行う
|
31
|
+
if ($uri != '/' || $uri != '/en') {
|
32
|
+
$languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
|
33
|
+
if (isset($languages)) { //languagesが空ではないとき
|
34
|
+
$browser_lamguage = $languages[0];
|
35
|
+
|
36
|
+
if ($browser_lamguage != 'ja') {
|
37
|
+
$url = get_site_url()."/en/";
|
38
|
+
}
|
39
|
+
}
|
40
|
+
header("Location: $url");
|
41
|
+
exit();
|
42
|
+
}
|
43
|
+
|
44
|
+
```
|
45
|
+
|
46
|
+
|
27
47
|
コード⑤
|
28
48
|
参考サイト:[ブラウザのロケールを判別してlocaleを含むURLにリダイレクトさせる[PHP]](https://hacknote.jp/archives/39939/)
|
29
49
|
結果:
|
30
50
|
日本語設定でアクセス → sample.com/ja/へ、リダイレクト(404エラーとなる)
|
31
51
|
英語設定でアクセス → sample.com/en/へ、リダイレクト
|
32
52
|
|
53
|
+
|
33
54
|
オリジナルのコード
|
34
55
|
```ここに言語を入力
|
35
56
|
// ユーザーの言語に合わせてリダイレクトする。
|
@@ -83,4 +104,8 @@
|
|
83
104
|
参考サイト:[【PHP】ブラウザの言語設定ごとに異なるURLにジャンプさせる方法](https://deco8.net/web/browser-language-jump/)
|
84
105
|
結果:
|
85
106
|
日本語設定でアクセス → ブラウザに、[サイトに重大なエラーがありました。]と表示される
|
86
|
-
英語設定でアクセス → ブラウザに、[サイトに重大なエラーがありました。]と表示される
|
107
|
+
英語設定でアクセス → ブラウザに、[サイトに重大なエラーがありました。]と表示される
|
108
|
+
|
109
|
+
もともとは、下に紹介している②のコードを改良して利用したく、[teratailの他のページで質問でさせてもらっていました](https://teratail.com/questions/247687)が、改良する前でもうまく動かない事がわかり、今回の新しい質問として出させてもらっています。
|
110
|
+
|
111
|
+
②のコードに加えこれまで、以下のコードで試しましたがどれもうまく動作してくれません。
|
4
内容編集
title
CHANGED
File without changes
|
body
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
コード⑤
|
28
28
|
参考サイト:[ブラウザのロケールを判別してlocaleを含むURLにリダイレクトさせる[PHP]](https://hacknote.jp/archives/39939/)
|
29
29
|
結果:
|
30
|
-
日本語設定でアクセス → sample.com/ja/へ、リダイレクト
|
30
|
+
日本語設定でアクセス → sample.com/ja/へ、リダイレクト(404エラーとなる)
|
31
31
|
英語設定でアクセス → sample.com/en/へ、リダイレクト
|
32
32
|
|
33
33
|
オリジナルのコード
|
3
内容編集
title
CHANGED
File without changes
|
body
CHANGED
@@ -18,11 +18,15 @@
|
|
18
18
|
|
19
19
|
追記
|
20
20
|
こちらのコード⑤が、最も希望に近い動きになるので、こちらのコードを変更して対応したいと思っています。
|
21
|
-
日本語設定でアクセス → sample.com/ja/へ、リダイレクトが、→ sample.com/になるよう変更したいです。
|
22
21
|
|
22
|
+
- 日本語設定でアクセス → sample.com/ja/へ、リダイレクトが、→ sample.com/になる
|
23
|
+
- 日本語以外の言語設定 → sample.com/en/へ、リダイレクトされる
|
24
|
+
動きにしたいです。
|
25
|
+
|
26
|
+
|
23
27
|
コード⑤
|
24
28
|
参考サイト:[ブラウザのロケールを判別してlocaleを含むURLにリダイレクトさせる[PHP]](https://hacknote.jp/archives/39939/)
|
25
|
-
結果:
|
29
|
+
結果:
|
26
30
|
日本語設定でアクセス → sample.com/ja/へ、リダイレクト
|
27
31
|
英語設定でアクセス → sample.com/en/へ、リダイレクト
|
28
32
|
|
2
追記の記入
title
CHANGED
File without changes
|
body
CHANGED
@@ -16,142 +16,15 @@
|
|
16
16
|
これまでに試したコード
|
17
17
|
使用するブラウザはchromeで、[こちらの方法で言語の設定をしています](https://aprico-media.com/posts/3359)
|
18
18
|
|
19
|
-
コード①
|
20
|
-
参考サイト:[①日本語と、②日本語以外の、2つの条件で振り分けるPHPのコードを知りたい](https://teratail.com/questions/247687)
|
21
|
-
|
19
|
+
追記
|
22
|
-
|
20
|
+
こちらのコード⑤が、最も希望に近い動きになるので、こちらのコードを変更して対応したいと思っています。
|
23
|
-
|
21
|
+
日本語設定でアクセス → sample.com/ja/へ、リダイレクトが、→ sample.com/になるよう変更したいです。
|
24
|
-
```ここに言語を入力
|
25
|
-
This page isn’t working
|
26
|
-
sample.com redirected you too many times.
|
27
|
-
Try clearing your cookies.
|
28
|
-
ERR_TOO_MANY_REDIRECTS
|
29
|
-
```
|
30
|
-
```ここに言語を入力
|
31
|
-
$url=$_SERVER["SCRIPT_NAME"];
|
32
|
-
$lang = preg_match("/^ja/",$_SERVER['HTTP_ACCEPT_LANGUAGE'])?"jp":"en";
|
33
|
-
if($lang=="en" and ! preg_match("/^/en/",$url)){ //修正
|
34
|
-
header("Location: /en");
|
35
|
-
exit;
|
36
|
-
}else if($lang=="jp" and preg_match("/^/en/",$url)){
|
37
|
-
header("Location: /");
|
38
|
-
exit;
|
39
|
-
}
|
40
|
-
```
|
41
22
|
|
42
|
-
コード②
|
43
|
-
参考サイト:[海外からのアクセスを振り分ける[php]](https://kotori-blog.com/php/globalaccess/)
|
44
|
-
結果:
|
45
|
-
日本語設定でアクセス → A:sample.comで表示される
|
46
|
-
英語設定でアクセス → B:sample.comで表示される(リダイレクトされない)
|
47
|
-
|
48
|
-
|
49
|
-
```ここに言語を入力
|
50
|
-
$languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
|
51
|
-
$languages = array_reverse($languages);
|
52
|
-
|
53
|
-
$result = '';
|
54
|
-
|
55
|
-
foreach ($languages as $language) {
|
56
|
-
if (preg_match('/^en/i', $language)) {
|
57
|
-
$result = 'English';
|
58
|
-
header("Location: /en");
|
59
|
-
} elseif (preg_match('/^ja/i', $language)) {
|
60
|
-
$result = 'Japanese';
|
61
|
-
header("Location: /");
|
62
|
-
}
|
63
|
-
}
|
64
|
-
if ($result == '') {
|
65
|
-
$result = 'Japanese';
|
66
|
-
header("Location: /");
|
67
|
-
}
|
68
|
-
```
|
69
|
-
|
70
|
-
|
71
|
-
コード③
|
72
|
-
参考サイト:[WordPressで多言語サイトを作成し、言語設定によってページをリダイレクトさせる](https://arrown-blog.com/wordpress-multiple-language/)
|
73
|
-
結果:
|
74
|
-
日本語設定でアクセス → ブラウザに、[サイトに重大なエラーがありました。]と表示される
|
75
|
-
英語設定でアクセス → ブラウザに、[サイトに重大なエラーがありました。]と表示される
|
76
|
-
|
77
|
-
```ここに言語を入力
|
78
|
-
/* * ブラウザ(スマホの場合は端末)の言語設定を取得 * 言語設定は複数されている可能性があることを考慮 */
|
79
|
-
$languagesConfigurations = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
|
80
|
-
$languagesConfigurations = array_reverse($languagesConfigurations);
|
81
|
-
|
82
|
-
$http = is_ssl() ? 'https' . '://' : 'http' . '://';
|
83
|
-
$url = $http . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
|
84
|
-
|
85
|
-
if ($_SESSION["isRedirect"] !== 1) {
|
86
|
-
$_SESSION["isRedirect"] = 1;
|
87
|
-
/*
|
88
|
-
* 言語設定の内容を1つ1つ解析する。
|
89
|
-
* array_reverseをしているので、
|
90
|
-
* 1番最後に取り出すデータ=優先度の高い言語設定となる。
|
91
|
-
* ・言語設定にen,fr,itのいずれかが含まれている場合は、USサイトにリダイレクト
|
92
|
-
* ・言語設定にjaが含まれている場合は、日本語サイトをそのまま表示
|
93
|
-
* ・あんまりなさそうだが、言語設定が何かの理由で取得できない場合は
|
94
|
-
* 日本語サイトそのまま表示するという設定内容
|
95
|
-
*/
|
96
|
-
foreach ($languagesConfigurations as $language) {
|
97
|
-
if (preg_match('/^en/i', $language)) {
|
98
|
-
$result = 'English';
|
99
|
-
$url = str_replace('/', '/en/', $url);
|
100
|
-
} elseif (preg_match('/^ja/i', $language)) {
|
101
|
-
$result = 'Japanese';
|
102
|
-
}
|
103
|
-
}
|
104
|
-
/*
|
105
|
-
* 英語だった場合はリダイレクト
|
106
|
-
* 日本語だった場合はリダイレクトせずセッションを削除
|
107
|
-
*/
|
108
|
-
if ($result === 'English') {
|
109
|
-
header("Location: " . $url);
|
110
|
-
} else if ($result === 'Japanese') {
|
111
|
-
unset($_SESSION["isRedirect"]);
|
112
|
-
} else {
|
113
|
-
unset($_SESSION["isRedirect"]);
|
114
|
-
}
|
115
|
-
} else if ($_SESSION["isRedirect"] === 1) {
|
116
|
-
unset($_SESSION["isRedirect"]);
|
117
|
-
}
|
118
|
-
```
|
119
|
-
|
120
|
-
コード④
|
121
|
-
参考サイト:[【PHP】ブラウザの言語設定ごとに異なるURLにジャンプさせる方法](https://deco8.net/web/browser-language-jump/)
|
122
|
-
結果:
|
123
|
-
日本語設定でアクセス → ブラウザに、[サイトに重大なエラーがありました。]と表示される
|
124
|
-
英語設定でアクセス → ブラウザに、[サイトに重大なエラーがありました。]と表示される
|
125
|
-
|
126
|
-
```ここに言語を入力
|
127
|
-
//言語設定取得
|
128
|
-
$language = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
|
129
|
-
//言語識別
|
130
|
-
if (preg_match('/ja/i', $language[0])) {
|
131
|
-
$result = 'ja';
|
132
|
-
} elseif (preg_match('/en/i', $language[0])) {
|
133
|
-
$result = 'en';
|
134
|
-
} elseif (preg_match('/pt/i', $language[0])) {
|
135
|
-
$result = 'pt';
|
136
|
-
}
|
137
|
-
//ジャンプ設定
|
138
|
-
if ($result == 'ja') {
|
139
|
-
header("Location:https://sample.net/");
|
140
|
-
}elseif ($result == 'en') {
|
141
|
-
header("Location:https://sample.net/en/");
|
142
|
-
}elseif ($result == 'pt') {
|
143
|
-
header("Location:https://sample.net/en/");
|
144
|
-
}else{
|
145
|
-
header("Location:https://sample.net/en/"); }
|
146
|
-
?>
|
147
|
-
```
|
148
|
-
|
149
|
-
|
150
23
|
コード⑤
|
151
24
|
参考サイト:[ブラウザのロケールを判別してlocaleを含むURLにリダイレクトさせる[PHP]](https://hacknote.jp/archives/39939/)
|
152
25
|
結果:サンプルのコードを、今回の自分の条件にどのように変更すれば良いのかわからず、試していません
|
153
|
-
日本語設定でアクセス →
|
26
|
+
日本語設定でアクセス → sample.com/ja/へ、リダイレクト
|
154
|
-
英語設定でアクセス →
|
27
|
+
英語設定でアクセス → sample.com/en/へ、リダイレクト
|
155
28
|
|
156
29
|
オリジナルのコード
|
157
30
|
```ここに言語を入力
|
@@ -177,4 +50,33 @@
|
|
177
50
|
header("Location: $url");
|
178
51
|
exit();
|
179
52
|
}
|
180
|
-
```
|
53
|
+
```
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
コード①
|
58
|
+
参考サイト:[①日本語と、②日本語以外の、2つの条件で振り分けるPHPのコードを知りたい](https://teratail.com/questions/247687)
|
59
|
+
結果:
|
60
|
+
日本語設定でアクセス → A:sample.comで表示される
|
61
|
+
英語設定でアクセス → B:sample.com/enに、リダイレクトされるが、以下のエラーが出る。
|
62
|
+
|
63
|
+
|
64
|
+
コード②
|
65
|
+
参考サイト:[海外からのアクセスを振り分ける[php]](https://kotori-blog.com/php/globalaccess/)
|
66
|
+
結果:
|
67
|
+
日本語設定でアクセス → A:sample.comで表示される
|
68
|
+
英語設定でアクセス → B:sample.comで表示される(リダイレクトされない)
|
69
|
+
|
70
|
+
|
71
|
+
コード③
|
72
|
+
参考サイト:[WordPressで多言語サイトを作成し、言語設定によってページをリダイレクトさせる](https://arrown-blog.com/wordpress-multiple-language/)
|
73
|
+
結果:
|
74
|
+
日本語設定でアクセス → ブラウザに、[サイトに重大なエラーがありました。]と表示される
|
75
|
+
英語設定でアクセス → ブラウザに、[サイトに重大なエラーがありました。]と表示される
|
76
|
+
|
77
|
+
|
78
|
+
コード④
|
79
|
+
参考サイト:[【PHP】ブラウザの言語設定ごとに異なるURLにジャンプさせる方法](https://deco8.net/web/browser-language-jump/)
|
80
|
+
結果:
|
81
|
+
日本語設定でアクセス → ブラウザに、[サイトに重大なエラーがありました。]と表示される
|
82
|
+
英語設定でアクセス → ブラウザに、[サイトに重大なエラーがありました。]と表示される
|
1
タイトル編集
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
アクセス元の言語設定によってURLを振り分けるコードがうまく機能しない
|
1
|
+
アクセス元の言語設定によってURLを振り分けるPHPのコードがうまく機能しない
|
body
CHANGED
File without changes
|