# URLに日本語を含むトピックは、URLが完全に一致しない場合、リダイレクトされない

**URL:** https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371
**Category:** Bug
**Created:** [2019 年 8 月 10 日午前 1:06 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371 "2019-08-10T01:06:40Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [2019 年 8 月 10 日午前 1:06 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/1 "2019-08-10T01:06:40Z")

</div>

[community.wanikani.com](http://community.wanikani.com) において、完全修飾 URL に日本語を含むトピックへのリンクを、新しいタブで開いたり、直接リンクをコピーして貼り付けたりすると、開けなくなりました。同じタブ内でリンクをクリックして移動する場合は問題なく動作します。

例えば、[このリンク](https://community.wanikani.com/t/old-title-for-the-thread/34890) を新しいタブで開くと、以下に移動するはずです。

> [キノの旅 Home Thread (Intermediate Book Club) - Book Clubs - WaniKani Community](https://community.wanikani.com/t/%E3%82%AD%E3%83%8E%E3%81%AE%E6%97%85-home-thread-intermediate-book-club/34890)

しかし実際には、以下に移動しようとして失敗します。

> [キノの旅 Home Thread (Intermediate Book Club) - Book Clubs - WaniKani Community](https://community.wanikani.com/t/%C3%A3%C2%82%C2%AD%C3%A3%C2%83%C2%8E%C3%A3%C2%81%C2%AE%C3%A6%C2%97%C2%85-home-thread-intermediate-book-club/34890)

このため、ページが読み込めません。

もし[リンク](https://community.wanikani.com/t/%E3%82%AD%E3%83%8E%E3%81%AE%E6%97%85-home-thread-intermediate-book-club/34890) が完全に一致している場合は問題なく動作します。ただし、トピックのタイトル変更が行われている場合、これはよく起こりません。

また、[try.discourse.org](http://try.discourse.org) 上で再現を試みましたが、このインストール版では、トピックタイトルに日本語が含まれていても、URL に日本語文字が追加されることはありません。その理由については不明ですが、そのような挙動がないため、そこでバグを再現することはできませんでした。

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2019 年 8 月 10 日午前 1:33 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/2 "2019-08-10T01:33:38Z")

</div>

どちらもトピック 34890 へのリンクです。私では Firefox で正常に読み込まれます。問題は何でしょうか？

---

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [2019 年 8 月 10 日午前 2:23 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/3 "2019-08-10T02:23:27Z")

</div>

_ため息_ またもや Chrome のバグかもしれませんね。私にとっては Firefox と Edge の両方で問題なく動作します。奇妙なことに、シークレットウィンドウでは最初は正常に動作するのですが、2 回目は失敗してしまいます。サイトのキャッシュやクッキーを削除してコンピュータを再起動しても同じ現象が起きます。

Chrome によると、エラーは「リダイレクトが多すぎます」とのことです。

 ![image](https://global.discourse-cdn.com/meta/original/3X/4/6/462f411c17c6d6917b6c2ce77dbbe867fccf83f2.png)

* * *

もしよろしければ、Chrome で確認していただき、これが私だけの問題ではなく、全般的な問題なのかどうかお調べいただけますでしょうか？最初のアクセスは正常に動作するようですので、ページを複数回開いて試してみてください。お手伝いいただき、ありがとうございます！

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2019 年 8 月 10 日午前 2:42 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/4 "2019-08-10T02:42:37Z")

</div>

Chrome モバイルで再現できます。🐛

---

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [2019 年 8 月 10 日午前 2:49 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/5 "2019-08-10T02:49:15Z")

</div>

ありがとうございます。Google に報告します。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2019 年 8 月 10 日午前 2:52 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/6 "2019-08-10T02:52:38Z")

</div>

Android の Chrome で 2 つ目のリンクにアクセスすると、無限にリダイレクトしてしまいます。

---

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [2019 年 8 月 10 日午前 2:55 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/7 "2019-08-10T02:55:54Z")

</div>

まだ Chrome でお困りでしょうか？彼らに報告する前に確認したくて質問しました。Discourse 側で最近、これに関連する変更があったとは考えられますか？（いずれにせよ、Discourse 側に変更があったとしても、この現象が Chrome でのみ発生する以上、おそらく Chrome 側の問題だと思われます。）

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2019 年 8 月 10 日午前 3:15 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/8 "2019-08-10T03:15:41Z")

</div>

> [@seanblue](#):
>
> ありがとう。Google に報告しようと思います。

少し待ってください。これは Discourse の問題かもしれません。Service Worker のバグの可能性もあります。

---

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [2019 年 8 月 10 日午前 3:22 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/9 "2019-08-10T03:22:52Z")

</div>

わかりました、更新ありがとうございます。

---

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [2019 年 8 月 14 日午後 4:12 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/12 "2019-08-14T16:12:14Z")

</div>

これについて更新はありますか？

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2019 年 8 月 15 日午前 12:37 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/13 "2019-08-15T00:37:22Z")

</div>

整理するには時間がかかりますが、すでに担当者が割り当てられているため、見落としはございません。

---

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [2019 年 8 月 15 日午後 1:55 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/15 "2019-08-15T13:55:50Z")

</div>

解決策や回避策が見つかることは期待していません。修正されるのを待つしかありません。

---

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [2019 年 8 月 19 日午後 11:27 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/16 "2019-08-19T23:27:58Z")

</div>

この問題はまだ発生していますか？もしかしたら修正済みかもしれません。あるいは、今回は何か異なることをしているのでしょうか。

---

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [2019 年 8 月 23 日午前 2:33 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/17 "2019-08-23T02:33:59Z")

</div>

> [@seanblue](#):
>
> 修正されたのかもしれませんね

いや、訂正します。今日また発生し始めました。なぜか一時的に直っていた理由もわかりません。

* * *

> [@sam](#):
>
> 解決まで時間がかかるでしょうね

解決に時間がかかる可能性があるため、当面の回避策でも構いません。元のスレッドで触れた通り、Try（メタでも確認しました）では日本語文字が URL に追加されないため、この問題が実質的に回避されています。これはサイト設定やカテゴリ設定で、サイト管理者と相談して変更できるものなのでしょうか？それ以外に回避策のご提案はありますか？

---

<div class="post-metadata">

### Author: ![YaserAlnajjar](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/yaseralnajjar/32/100729_2.png) [@YaserAlnajjar](https://meta.discourse.org/u/YaserAlnajjar)
#### Post date: [2019 年 9 月 9 日午後 10:39 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/18 "2019-09-09T22:39:23Z")

</div>

アラビア語のタイトルを持つ URL をブラウザに入力すると、例えば：

```plaintext
https://forums.coretabs.net/t/2456

```

無限のリダイレクトが発生してしまいます（生成されたリンクが正しくないようです。これはエンコーディングに関連していると思われます）。

 ![image](https://global.discourse-cdn.com/meta/original/3X/d/7/d78201ae70153c5831a6ac7af002c252811a5e3f.png)

本来は以下のようにリダイレクトされるはずです：

```plaintext
https://forums.coretabs.net/t/ماذا-يجب-ان-نتعلم-في-javascript-؟/2456

```

## なぜタイトル付きのリンクを共有しないのか？

Twitter や Facebook のアラビア語サポートが不十分だからです：

 ![image](https://global.discourse-cdn.com/meta/original/3X/2/b/2b2b776d25cc8a4a93b5524cf2b5bef9d91beaa2.png)

- このバグは最新のアップデート以前には存在しませんでした（最後にリンクを共有しようとしたのは約 2 週間前で、その時は完全に問題ありませんでした）。

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2019 年 9 月 9 日午後 11:10 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/19 "2019-09-09T23:10:34Z")

</div>

コードベースを調査したところ、エラーの原因は比較的単純なようですが、私の仮定を確認させてください。

`slug_generation_method` というサイト設定があり、このバグをトリガーするには、デフォルトの `ascii` 値から `encoded` に変更する必要があります。このサイト設定を変更すると、すべてのスラッグがクリアされ、再生成されます。

理解できていないのは、サイト設定が “encoded” に設定されている場合に、なぜ以下のようなスラッグが生成されるのかということです。

```plaintext
[3] pry(main)> SiteSetting.slug_generation_method
=> "encoded"
[4] pry(main)> Slug.for(t.slug)
=> "キノの旅-home-thread-intermediate-book-club"

```

私は “encoded” とは以下のようなものを意味すると考えていました。

```plaintext
[5] pry(main)> CGI.escape(Slug.for(t.slug))
=> "%E3%82%AD%E3%83%8E%E3%81%AE%E6%97%85-home-thread-intermediate-book-club"

```

これはおそらく以下のプルリクエストに由来しているようです。

> <https://github.com/discourse/discourse/pull/3370>
>
> spec: https://meta.discourse.org/t/removing-the-concept-of-slugs-for-some-langua…ges/26643

テーブルからの生のスラッグは、トピックのスラッグが一致しない場合に 301 応答の `Location` ヘッダーで返されますが、そこには有効な URL を返すべきだと私は考えます。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2019 年 9 月 9 日午後 11:13 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/20 "2019-09-09T23:13:08Z")

</div>

はい、エンコード用のスラッグ生成メソッドを整理して、ブラウザの魔法に依存しないようにすべきですね。

---

<div class="post-metadata">

### Author: ![seanblue](https://avatars.discourse-cdn.com/v4/letter/s/dc4da7/32.png) [@seanblue](https://meta.discourse.org/u/seanblue)
#### Post date: [2019 年 9 月 14 日午後 11:13 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/21 "2019-09-14T23:13:04Z")

</div>

つまり、URL 自体がエンコードされたバージョンを表示するということですか？それとも、リダイレクトが内部でエンコードされたバージョンを使用して処理するだけですか？どちらにせよ、ブラウザの挙動に依存せず、この問題を「自動的に解決」できるのが理想的です。

---

<div class="post-metadata">

### Author: ![Arta\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arta_s/32/537495_2.png) [@Arta\_S](https://meta.discourse.org/u/Arta_S)
#### Post date: [2019 年 10 月 1 日午前 7:37 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/22 "2019-10-01T07:37:31Z")

</div>

こんにちは、

この件は解決しましたか？  
まだこの問題に直面しています。以前、この件について [私が作成したトピック](https://meta.discourse.org/t/odd-issue-with-topic-link/129822) で投稿した通りです。

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2019 年 10 月 2 日午前 1:34 UTC](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371/23 "2019-10-02T01:34:15Z")

</div>

> [@Arta\_S](#):
>
> この問題は解決しましたか？

いいえ、#Contribute > Bug カテゴリのこちらでオープンなトピックとして残っていることからわかります 😅

> [@sam](#):
>
> そうですね、エンコードされたスラッグの生成方法をクリーンアップして、ブラウザの自動処理への依存を減らすべきですね。

@sam 今日はこれを再度確認しました。アプローチとしては2つの方法があります。

1. スラッグ生成の設定が **エンコード** に設定されている場合、スラッグカラムに実際の **エンコード済み** スラッグを保存する。エンコード済みスラッグを使用している場合、現在のすべてのスラッグをクリアするマイグレーションを実行し、時間とともに適切に再生成させる。

2. 現在のUTF-8スラッグを維持し、301リダイレクトのヘッダーで送信する際にその場でパッチを当てる。

私見では、1の方が「より正しく」、クライアントに生のスラッグが渡されにくくなります。しかし、スラッグジェネレーターへのパッチ適用だけでは不十分でした。ブラウザは301リダイレクトでエンコードされたURLを受け取りますが、次のリクエストではそれをデコードするため、スラッグの比較が失敗して再度リダイレクトされてしまいます。つまり、トピックコントローラーのスラッグ比較メソッド、おそらく他の箇所にもパッチを当てる必要があります。

この方向で進めてよろしいでしょうか？

[Next page](https://meta.discourse.org/t/topic-with-japanese-in-url-doesnt-redirect-if-url-doesnt-perfectly-match/125371.md?page=2)
