[php]URLからパラメータを削除する方法

パラメータ使いたいけど表示はいらない、邪魔くさいっていうときのやつ。

用途

先日、パラメータを取得してcookieを仕込むことに成功した。

これを踏まえて、受け取ったパラメータはcookieに入れ込んだから用済み。パラメータ付きのアクセスが有ったという事実が必要なだけなので、残しておくことはない。むしろ流入元を絞りたいから、URLをばらまかれた時にパラメータがついてると不都合になる。だからパラメータを削除したい。

重要なのは、

  • 「WEBサイトに特定のクエリパラメータ付きでアクセスしたという実績」
  • 「表示するWEBページにクエリパラメータを残さない」

1回のアクセスでこの2点を解決するルール。

手法

  1. URLを引っこ抜く
  2. パラメータを削除する
  3. パラメータなしにリダイレクトする

パラメータ無しで抜けたら楽なんだけどね。

内容

「?utm_source=line」があった場合「?」以降を全部削除して、それでrefreshする。

<?php if(get_query_var('utm_source') == 'line'): ?>
<?php
    $readURL = $_SERVER["REQUEST_URI"];
    $returnURL = substr($readURL, 0, strcspn($readURL,'?'));
?>
<meta http-equiv="refresh" content="0;URL=<?php echo $returnURL; ?>">
<?php endif; ?>

クエリパラメータの有無でifを掛けとかないとエンドレスでリフレッシュしまくる。

応用とか

「?utm_source=line」じゃなくて「&utm_source=line」だったり、まあ要は指定したパラメータの前後になんかしらが付いていて、ピンポイントで削除したい場合もある。

今回はそんな場合ではないのでやらないけど、まあ、特定パラメータを指定するのであれば文字列から文字列を削除すれば良い。

注意とか

WPでFAQとかを作る時に、特定タグで抽出した一覧を作る時に、taxonomy.phpとかcategory.phpじゃなくて固定ページで作ることがたまによくある。その時はクエリで切り替えるようにしてるんで、だから全消しするとやばい頁もあるっていう話。

あと、サーバーが弱いとかページが重いと遷移が見て取れるんで止めといたほうが良い。

.htaccessで削除

.htaccessでクエリパラメータを削除することもできる。
パラメータを指定できるんで、「?utm_source=line」を削除する場合はこうする。
参考はここ。

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{QUERY_STRING} ^utm_source=line$
RewriteRule ^(.*)$ /$1? [R=301,L]

# BEGIN WordPress

WPの場合は「# BEGIN WordPress」の手前に書かないと効かない。
これの後に書くと下層ページに効かなくなるらしい。

これでクエリなしが表示されるようになるんだけど、ページにアクセスする前に切り替わる(アクセスした実績が残らない)んで、クエリによるギミックは死ぬ。

転送ページを一枚噛ませる

やりたいことを大前提に持ってくるとこれしかなかった。

転送ページはユーザーに表示するコンテンツを持たないので軽さだけを優先して作るのがいい。

環境はWPなのでAdvancedCustomFieldで転送先URLとディレイタイムの枠を作って、meta refreshに仕込む。
meta refreshを0秒にしてもアクセスしたという実績はあるので、クエリパラメータをトリガーにしたcookie作成命令はちゃんと発火する。
登録する転送先URLにはクエリパラメータを記載しないので、該当ページ表示時にはただのURLしか表示されない。

あとは作成した転送ページのURLにクエリパラメータをくっつけて、このURLをコピーできない形でリンクに仕込む。

LINE公式アカウントだとリンク付画像とか、リッチメニューとか、カルーセルとか。

コメント

タイトルとURLをコピーしました