日本語URLのページをリダイレクトしようとしてハマった件

日本語URLのページをリダイレクトしようとしてハマった件

全国1,000万のランチェスターblogウォッチャーの皆さんはお気づきのとおり、2017年末にコーポレートサイトをリニューアルしました。

それに伴って、旧サイトで日本語URLだったページをリニューアルを期に英語表記のURLに変える作業をしてまして、例えば旧サイトではパタゴニアさんのアプリ実績のURLは

https://www.lanches.co.jp/works/パタゴニア公式モバイルアプリ

だったんですが、いまこのURLにアクセスすると新しいURLにリダイレクトされています。

 

これを設定するためには、Webサーバに設置している.htaccess のファイルに

Redirect 301 [旧URL] [新URL]

みたいに書くわけです。お約束ですね。

ただ、日本語URLってやつは扱いがなかなかやっかいで、たいていはURLエンコードという処理をしてURLにマルチバイトの文字(簡単に言うと全角文字)が含まれないように変換します。前述のパタゴニアさんのアプリ実績ページのURLの場合は

https://www.lanches.co.jp/works/%E3%83%91%E3%82%BF%E3%82%B4%E3%83%8B%E3%82%A2%E5%85%AC%E5%BC%8F%E3%83%A2%E3%83%90%E3%82%A4%E3%83%AB%E3%82%A2%E3%83%97%E3%83%AA

こうなります。

リダイレクトの設定ファイルに書くURLは当然URLエンコードされてないとマズいだろうと思っていたので、せっせと変換かけて結構な量のリダイレクト設定を用意したんですが、いざサーバに置いてみると全くリダイレクトされない。正直こんなことでつまづくとは思ってなかったので、ちょっと焦りました。

 

原因は .htaccessの文字コード

調べてみると、リダイレクト元のURLをURLエンコードしてしまっていたことが問題で、わざわざ日本語URLを変換する必要は無いという情報に行き当たります。

つまり

Redirect 301 works/パタゴニア公式モバイルアプリ /works/patagonia

と書くのが正解ということらしい。しかもリダイレクト先はURLエンコードしちゃダメとか。ほんまかいな。

 

結論としてそれはほんまではなくて、それだけではリダイレクトされませんでした。

実はこの情報が書かれていたサイトにはもう1つ「.htaccessをutf-8で書く必要がある」という追記があり、実際に.htaccessの文字コードを変換して保存し直したらこの設定でちゃんとリダイレクトされるようになりました。

 

ですが、ここで1つ疑問が生じます。

 

実はこれ、単に .htaccessの文字コードの問題であって、URLエンコードしてあるかどうかは関係ないのでは…?

 

試してみると予想通り、URLエンコードの文字コードと .htaccessの文字コードが一致していれば、リダイレクト元のURLはエンコードしてあってもしてなくても、問題なくリダイレクトされました(文字コードはutf-8にしてます)。

というわけで、日本語URLをリダイレクトする必要が出てしまったWeb管理者のみなさん、くれぐれも.htaccessの文字コードには気をつけてくださいな。

 

とか言って、文字コードの種類やエンコード有無の全パターン検証したわけじゃないので違ったらすいません(逃げ腰

 

※写真はフリー写真素材ぱくたそさんの素材を使わせていただきました。

TAG

  • このエントリーをはてなブックマークに追加
篠キチ
Planner 篠キチ shinokichi

約3年半にわたり君臨したランチェスター最年長の座を譲り、今はただの猫・鉄道・Perfume好きな不惑おじさん。好きなスタバオーダーはクワットロベンティノーホイップソイホワイトモカ。