質問するログイン新規登録

質問編集履歴

7

レイアウト調整

2020/03/18 12:20

投稿

tomaa
tomaa

スコア84

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

追記記入

2020/03/18 12:20

投稿

tomaa
tomaa

スコア84

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

内容編集

2020/03/18 08:44

投稿

tomaa
tomaa

スコア84

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

内容編集

2020/03/18 05:53

投稿

tomaa
tomaa

スコア84

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

内容編集

2020/03/17 16:02

投稿

tomaa
tomaa

スコア84

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

追記の記入

2020/03/17 16:01

投稿

tomaa
tomaa

スコア84

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
- 日本語設定でアクセス → A:sample.comで表示され
20
+ こちらのコード⑤が、最も希望に近い動きになので、こちらのコードを変更して対応したいと思っています。
23
- 語設定でアクセス → B:sample.com/enに、リダイレクトされるが、以下のエラーが出る。
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

タイトル編集

2020/03/17 15:08

投稿

tomaa
tomaa

スコア84

title CHANGED
@@ -1,1 +1,1 @@
1
- アクセス元の言語設定によってURLを振り分けるコードがうまく機能しない
1
+ アクセス元の言語設定によってURLを振り分けるPHPのコードがうまく機能しない
body CHANGED
File without changes