芝生やDIY等のライフハックやWeb制作情報を発信するメディア

【動的サイトのお引越しに】パラメータを引き継ぐ.htaccessの記述方法

Web2017年5月12日

先日業務での必要となったケースがあり、リダイレクト元のパラメータをリダイレクト先に引き継ぐ、といった.htaccessを用意しました。意外と覚えておくと便利で、phpなどで動的サイト構築している場合にドメインの引っ越しがあった場合など、リダイレクトを行う際に多いに役立ちます。

サンプルコード

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ https://www.yahoo.co.jp/ [R=301,QSA,L]
</IfModule>

解説

見慣れた.htaccessにおけるリダイレクト記述のように見えますが、末尾に「QSA」というフラグ指定があるのが特徴です。これを指定しておくとリダイレクト後もパラメータを引き継ぐことができます。

「QSA」は厳密にはパラメータを引き継ぐための指定ではない

以下の.htaccessでも、実はパラメータは引き継がれます。
/hoge?query=123にアクセスした場合、/moge?query=123にリダイレクトされます。

RewriteRule ^hoge$ /moge [L]

QSAフラグを使うべきシーンは、リダイレクト先のURLに何かしらのパラメータが存在する場合のみです。QSAのフラグ指定が無い場合、リダイレクト元のパラメータは破棄されます。
ですが、QSAフラグを指定することでパラメータを結合することが可能になります。

以下の.htaccessの場合/hoge?query=123 は/moge?date=20170425にリダイレクトされます。

RewriteRule ^hoge$ /moge?date=20170425 [L]

以下のようにQSAフラグを指定すると、/fuga?query=123は/moge?date=20170525?query=123にリダイレクトされます。

RewriteRule ^fuga$ /moge?date=20170525 [L,QSA]

まとめ

静的サイトだけではなく動的サイトのリダイレクトにおいても.htaccessは非常に便利です。
こういった.htaccessの小技をいくつか覚えておくと、かゆいところに手が届くようになりますのでぜひご参考にしてみてください。

「Web」の他の記事を読む

ページの先頭に戻る