カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
例えば、
http://dontstopmusic.no-ip.org/hoge/show?bar=1&foo=1
から要らないパラメタ foo=1 を消して
http://dontstopmusic.no-ip.org/hoge/show?bar=1
にしたい場合です。ライブラリ、フレームワーク、外部のリダイレクタなどが余計なパラメタをつけるので URL の正規化をしたいなあという用途に。
mod_rewrite を使います。
mod_rewrite は便利ですが、基本的にパスに対する操作しかできません。普通に RewriteRule を書いてもクエリーストリング部分は無視されてしまいます。なので、一旦クエリーストリングをパスに追加してから操作することにします。ルールはこちら。
RewriteCond %{QUERY_STRING} foo=1
RewriteRule ^(.*)$ $1#%{QUERY_STRING} [C]
RewriteRule ^(.*)#(|.*&)foo=1(&|$)(.*) $1?$2$4 [R=301,L,NE]
最初に挙げた URL に対して、以下のようにマッチングと書き換えが行われます。
1. QUERY_STRING bar=1&foo=1 が foo=1 にマッチするので続くルールを適用 2. ^(.*)$ に /hoge/show がマッチ。 $1=/hoge/show /hoge/show → /hoge/show#bar=1&foo=1 に書き換え 3. ^(.*)#(|.*&)foo=1(&|$)(.*) に /hoge/show#bar=1&foo=1 にマッチ。 $1=/hoge/show $2=bar=1& $3= /hoge/show#bar=1&foo=1 → /hoge/show#bar=1 に書き換え
# を結合子/分離子に使っているので、元々パスに # が含まれていると正しく動作しません。他にも何かありそうなので、ご利用の際にはちゃんと確認してからお願いします。
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).