WordPressでパーマリンクを変更したのでPHPで301リダイレクトする。

パーマリンクを変えたら、wordpressはいい感じにリダイレクトしてくれるのかと思ったら、そんなことないんですね。。

というわけで、パーマリンク変えたので301リダイレクトをしたいわけです。

なぜhtaccessやプラグインではなくPHPでリダイレクトするかというと
パーマリンクって規則正しいので、わざわざ、URL一つずつ指定しなくても、
プログラムでリダイレクトしたほうが楽だからです。

URLの取得

$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
// 417.run/hogehoge/

フルバージョン

$url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
// https://417.run/hogehoge/

301リダイレクト

ちなみにheaderの前にechoとか画面に出力されるようなことしたらだめです。
これをプログラムでなんかしてfunctions.phpの先頭に書けばOK

header("HTTP/1.1 301 Moved Permanently");
header("Location: https://417.run/$name/$post->ID/");
exit;

おまけ(私がやったやつ)

$url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$res = explode('417.run/', $url);
if (count($res) > 1) {
  $res = explode('/', $res[1]);
  if (count($res) > 0) {
    if (strpos($res[0], '20') !== false) {
      $name = array_pop($res);
      if ($name == '') {
        $name = array_pop($res);
      }
      $the_query = new WP_Query(['name' => $name]);
      if ($the_query->have_posts()) {
        foreach ($the_query->posts as $post) {
          header("HTTP/1.1 301 Moved Permanently");
          header("Location: https://417.run/$name/$post->ID/");
          exit;
        }
      }
    }
  }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です