URLが「https://sakura.monte-verita.biz/archives/3186」みたいになってたので、そこから「/archives」を取り除く方法。
具体的には、
「https://sakura.monte-verita.biz/archives/3186」
↓
「https://sakura.monte-verita.biz/3186」
にしたい。
プラグイン(WP No Category Base)もあるようだけど、私の環境ではなぜか動作しなかったので、自力で対応。
公開リリース前ならば、単純に「設定→パーマリンク設定」で設定するだけでOKなのだけど、私の場合は既に「/archives」付きURLで運用してしまっていたため、今からその設定をすると、以前の「/archives」付きURLでアクセスしてくれた人には404エラーが発生してしまうという事態が・・・。
SEOやらリンクを張っていただいてる他サイトさんの手前、それは避けたかったので、PHPでどうにかした。
1.まずは、WordPress管理画面から設定を変更する
設定→パーマリンク設定を開く。
URLにarchivesが入る場合は、大抵はここで設定が「数字ベース」、「カスタム構造」(←デフォルト設定のまま)なのではないかと思う。
今回は「カスタム構造」を選択する。
カスタマイズ用の入力テキストは「/%post_id%」を入力。(archivesは入れない。)
「変更を保存」を押す。
公開リリース前のサイトならば、設定はここまでで良い。
・・・問題は、既にリリースされている場合。
以前のarchives付きURLでアクセスすると、404エラーになってしまう。
その場合は、次の2を行う。
2.以前の「/archives」付きURLでのアクセスに対して、404エラーが表示されないよう、PHPでリダイレクトさせる
WordPressフォルダを置いている同階層のindex.php(あるいはWordPressフォルダの直下のindex.php)の先頭に、これを記述。
<?php
// URLに「/archives/」が含まれていたら、取り除いてリダイレクト
$now_addr = (empty($_SERVER["HTTPS"]) ? "http://" : "https://").$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
if(preg_match("/\/archives\//s",$now_addr)){
$new_addr = preg_replace('/\/archives\//s', '/', $now_addr);
// リダイレクト(移動)
header( "Location: $new_addr" ) ;
exit;
}
?>
URLに「/archives」があったら、取り除いてリダイレクトをかける、という処理。
これをPHPですることで、以前のURLでアクセスされても404エラーを起こさずに新しいURLへ誘導することが可能となる。