URL正規化をするためサイト全体にリダイレクト処理を入れたときに、
クリティカルなバグを発生させてしまったことがあったため備忘&戒めのため書きます。
そもそもURL正規化ってなんだよというところから。
URL正規化とは
簡単に言うと、コンテンツ内容が全く同じである複数URLでオリジナルのURLを明確にしSEO力を上げる処理になります。
例えば、www.あり・なしどちらも表示できる状態であったり、index.htmlのあり・なしだったり。
これらを片方に寄せるようリダイレクト処理をかけたり、canonical属性を使ったりします。
詳しくはこのあたりを見ればわかるかと思います。
正規化するためにどんなことをしたか
今回は、URL末尾のスラッシュありなしでどちらも同じ内容が表示されていたため、
サイト全体をスラッシュありに統一しようとなり.htaccessに処理を記述しました。
RewriteRule ^(.+[^/])$ /$1/ [R=301,L]
これが悲劇の始まりです。
どんなバグが発生したか
具体的には以下のようなバグが発生していました。
- 自前APIへリクエストしたくてもリダイレクトされ正常にリクエストできなくなり、ページング時などデータ取得できず関連箇所死亡
- 同アプリケーションで用意している管理画面にログインできなくなる
つまり、スラッシュありに統一したはいいものの、
リクエストは以前からスラッシュなしにリクエストするようになっていたため
Ajaxで処理していた箇所などはリクエストしても正常に返ってこなくなるという状態となっていたわけです。
テストコードもない状態で、適当に開いたページがリダイレクトされるかどうかしか確認できていなかったため、
上記のような状態を本番にアップしてから気づいてしまいました。
対応方法
今回は取り急ぎ気づいた時点でリダイレクトを一旦外しました。
その後、APIへのリクエストなど正規化する必要もなくクリティカルなエラーにつながりそうなURLでは正規化をかけない、
他のフロント側のURLにはリダイレクトをかける、というように修正しました。
ちょっと考えれば気づきそうなものですが…またやってしまわないよう気をつけたいです。