LoginSignup
0

More than 5 years have passed since last update.

動的→静的リダイレクトさせようとしてクエリストリング(クエリパラメータ)の取り扱いではまった。

Posted at

NetCommons2 で作成された動的サイトをアーカイブのためにwgetで静的サイトに変換したあとに元の動的URLから静的ファイルへのリダイレクトを設定中にクエリストリングのとりあかいではまってしまいました。

最初にかいてたのは下記の様な感じ。

RewriteEngine on
RewriteBase /
RewriteRule ^(|index.php)\?(.+)$ index.php@$2.html [R=301,L]

index.php?page_id=100 とかにアクセスがあったら index.php@page_id=100.html にリダイレクトされることを想定してたんですが、全然リダイレクトされません。

で、ぐぐってみたらRewriteRuleの転送元にクエリストリングは含まれないんですね。

かわりにRewriteCondを使ってくれと言うことのようです。

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^(|index.php)$ index.php@%1.html [R=301,L]

これで目的のファイルにリダイレクトされるようにはなったんですが、もうひとつ問題が。
リダイレクト先にクエリストリングがくっついたまま index.php@page_id=100.html?page_id=100 というURLに…

リダイレクト先にクエリストリングをつけたくない場合は末尾に "?" を追加するといいようなので最終的には下記の様になりました。

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^(|index.php)$ index.php@%1.html? [R=301,L]

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0