質問編集履歴

5

内容編集

2020/03/18 12:26

投稿

tomaa
tomaa

スコア84

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,15 @@
1
+ 追記:
2
+
3
+ こちらの質問で解決していただきました。
4
+
5
+ [アクセス元の言語設定によってURLを振り分けるPHPのコードがうまく機能しない](https://teratail.com/questions/247776)
6
+
7
+ ご協力いただきました皆様ありがとうございました。
8
+
9
+
10
+
11
+ ---
12
+
1
13
  マルチサイト化した複数のwordpressサイトを、アクセス元の条件によって表示させる方法を知りたいです。
2
14
 
3
15
 

4

追記記入

2020/03/18 12:26

投稿

tomaa
tomaa

スコア84

test CHANGED
File without changes
test CHANGED
@@ -140,7 +140,7 @@
140
140
 
141
141
  ---
142
142
 
143
- ◆追記
143
+ ◆追記
144
144
 
145
145
  こちらのサイトのコードも参考にすると、
146
146
 
@@ -258,6 +258,36 @@
258
258
 
259
259
  ---
260
260
 
261
+ 追記②
262
+
263
+ 回答でいただいたコードはエラーが出ますが、英語設定でアクセスするとリダイレクトはされます。
264
+
265
+ ```ここに言語を入力
266
+
267
+ $url=$_SERVER["SCRIPT_NAME"];
268
+
269
+ $lang = preg_match("/^ja/",$_SERVER['HTTP_ACCEPT_LANGUAGE'])?"jp":"en";
270
+
271
+ if($lang=="en" and ! preg_match("/^/en/",$url)){ //修正
272
+
273
+ header("Location: /en");
274
+
275
+ exit;
276
+
277
+ }else if($lang=="jp" and preg_match("/^/en/",$url)){
278
+
279
+ header("Location: /");
280
+
281
+ exit;
282
+
283
+ }
284
+
285
+ ```
286
+
287
+
288
+
289
+ ---
290
+
261
291
  ◆開発環境
262
292
 
263
293
  CentOS (7 x86_64)

3

追記記入

2020/03/17 10:34

投稿

tomaa
tomaa

スコア84

test CHANGED
File without changes
test CHANGED
@@ -140,6 +140,124 @@
140
140
 
141
141
  ---
142
142
 
143
+ ◆追記
144
+
145
+ こちらのサイトのコードも参考にすると、
146
+
147
+ [WordPressで多言語サイトを作成し、言語設定によってページをリダイレクトさせる](https://arrown-blog.com/wordpress-multiple-language/)
148
+
149
+ ブラウザーでアクセスした際に下記のエラーがでます。
150
+
151
+ ```ここに言語を入力
152
+
153
+ サイトに重大なエラーがありました。
154
+
155
+
156
+
157
+ WordPress でのデバッグをさらに詳しく見る。
158
+
159
+ ```
160
+
161
+
162
+
163
+ 参考コード
164
+
165
+ $url = str_replace('/jp/', '/us/', $url);
166
+
167
+ を自分のサイトに対応させるために、
168
+
169
+ $url = str_replace('/', '/en/', $url);に変えて動作を確認しています。
170
+
171
+ ```ここに言語を入力
172
+
173
+ <?php
174
+
175
+ /* * ブラウザ(スマホの場合は端末)の言語設定を取得 * 言語設定は複数されている可能性があることを考慮 */
176
+
177
+ $languagesConfigurations = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
178
+
179
+ $languagesConfigurations = array_reverse($languagesConfigurations);
180
+
181
+
182
+
183
+ $http = is_ssl() ? 'https' . '://' : 'http' . '://';
184
+
185
+ $url = $http . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
186
+
187
+
188
+
189
+ if ($_SESSION["isRedirect"] !== 1) {
190
+
191
+ $_SESSION["isRedirect"] = 1;
192
+
193
+ /*
194
+
195
+ * 言語設定の内容を1つ1つ解析する。
196
+
197
+ * array_reverseをしているので、
198
+
199
+ * 1番最後に取り出すデータ=優先度の高い言語設定となる。
200
+
201
+ * ・言語設定にen,fr,itのいずれかが含まれている場合は、USサイトにリダイレクト
202
+
203
+ * ・言語設定にjaが含まれている場合は、日本語サイトをそのまま表示
204
+
205
+ * ・あんまりなさそうだが、言語設定が何かの理由で取得できない場合は
206
+
207
+ * 日本語サイトそのまま表示するという設定内容
208
+
209
+ */
210
+
211
+ foreach ($languagesConfigurations as $language) {
212
+
213
+ if (preg_match('/^en/i', $language)) {
214
+
215
+ $result = 'English';
216
+
217
+        $url = str_replace('/jp/', '/us/', $url);
218
+
219
+ // URLのうち/jp/の部分のみを/us/に置き換え
220
+
221
+ } elseif (preg_match('/^ja/i', $language)) {
222
+
223
+ $result = 'Japanese';
224
+
225
+ }
226
+
227
+ }
228
+
229
+ /*
230
+
231
+ * 英語だった場合はリダイレクト
232
+
233
+ * 日本語だった場合はリダイレクトせずセッションを削除
234
+
235
+ */
236
+
237
+ if ($result === 'English') {
238
+
239
+ header("Location: " . $url);
240
+
241
+ } else if ($result === 'Japanese') {
242
+
243
+ unset($_SESSION["isRedirect"]);
244
+
245
+ } else {
246
+
247
+ unset($_SESSION["isRedirect"]);
248
+
249
+ }
250
+
251
+ } else if ($_SESSION["isRedirect"] === 1) {
252
+
253
+ unset($_SESSION["isRedirect"]);
254
+
255
+ }
256
+
257
+ ```
258
+
259
+ ---
260
+
143
261
  ◆開発環境
144
262
 
145
263
  CentOS (7 x86_64)

2

内容修正

2020/03/17 10:29

投稿

tomaa
tomaa

スコア84

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
  ---
28
28
 
29
- 下記のサイトの開設が参考になりますが、
29
+ 下記のサイトの解説が参考になりますが、
30
30
 
31
31
  [海外からのアクセスを振り分ける[php]](https://kotori-blog.com/php/globalaccess/)
32
32
 

1

タイトル編集

2020/03/17 08:18

投稿

tomaa
tomaa

スコア84

test CHANGED
@@ -1 +1 @@
1
- ①日本語と、②日本語以外の条件で振り分けるPHPのコードを知りたい
1
+ ①日本語と、②日本語以外の、2つの条件で振り分けるPHPのコードを知りたい
test CHANGED
File without changes