PHPのheader関数にアンカーがつきまとう(ほぼ未解決):メモ

今まで気づかなかったのでメモとして。

状況

  • header関数でリダイレクトさせる
  • リダイレクト前のURLにはアンカーがある
  • リダイレクト後のURLにも同じアンカーがつく

上記の状況で以下のような動作を目指していました。

  • リダイレクト後のURLにはアンカーを含めない

実は今までアンカーがheader関数のリダイレクト後にまで付いてくるとは知らず..。

対応策

結論から書くとPHP側での対応策が見つからず、リダイレクト後のページの方で以下のようなJSを使ってアンカーを消しました。


<script type="text/javascript">
window.history.replaceState(null, '', location.pathname + location.search);
//要件によって以下なども
window.history.replaceState(null, '', location.pathname);
</script>

PHP側で対応しようとした際には、以下のようにアンカーなしのURLを設定してもアンカーがくっついてくるためどうしてよいやら…。


//https://example.com/test1.php#anchor から https://example.com/test2.html へとリダイレクトさせる場合
header('Location: https://example.com/test2.html');
//上記のようにしてもリダイレクト後のURLは https://example.com/test2.html#anchor になる

当初はheader関数のオプションか何かで簡単にできるのではと考えていたのですが見つからず。

検索では「アンカーをつけてリダイレクトする方法」という方向の情報はよくでてきますが、「アンカーを消してリダイレクトする方法」というのは見つからず。

結び

思わぬところで時間を食いました。

アンカーが付いていてもGAなどでは表示されず計測に問題はでないと思いますが、それでも実際に付いていてアドレスバーで目視できるのは確かですし、この状態が意図していない以上は困った問題でした。

もっとスマートな対応方法があれば良いのですが…。

0人がこの記事を評価

役に立ったよという方は上の「記事を評価する」ボタンをクリックしてもらえると嬉しいです。

連投防止のためにCookie使用。SNSへの投稿など他サービスとの連動は一切ありません。

コメント欄