2026年5月20日
2026年5月20日
WordPressのパーマリンクが機能しない場合の解決方法
はじめに
WordPressのパーマリンクは .htaccess(Apache)または Nginx の設定と連動しています。パーマリンクを変更したり新しい投稿タイプを追加した後に404エラーが増える場合は、リライトルールの更新が必要です。
症状・原因
- 投稿・固定ページのURLにアクセスすると404になる
- パーマリンク設定を変更しても反映されない
- カスタム投稿タイプを追加したがURLが404になる
/page/2/など2ページ目が404になる- ドメイン直下のURLのみ動作してサブディレクトリが404
解決手順
ステップ1:パーマリンクを再保存(最初に試すこと)
wp rewrite flush --hard
管理画面からは「設定 → パーマリンク設定」を開いて「変更を保存」ボタンをクリックするだけでも同様の効果があります。
ステップ2:.htaccessを確認・再生成
# .htaccess の内容を確認
cat .htaccess
# WordPress標準の .htaccess を再生成
wp rewrite flush --hard
正常な .htaccess には以下のブロックが必要です:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
ステップ3:mod_rewriteが有効か確認
# Apacheのモジュールを確認
apache2ctl -M | grep rewrite
# rewrite_module が表示されればOK
# mod_rewriteを有効化(Ubuntu)
sudo a2enmod rewrite
sudo systemctl restart apache2
また、AllowOverride All が設定されていないと .htaccess が無視されます。
# /etc/apache2/sites-available/example.conf
<Directory /var/www/html>
AllowOverride All # ← None になっていると .htaccess が無視される
</Directory>
ステップ4:Nginx環境の設定
# nginx.conf — WordPressのパーマリンクに対応
server {
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
ステップ5:カスタム投稿タイプのパーマリンク
// register_post_type の後にフラッシュが必要
register_post_type('portfolio', [
'public' => true,
'rewrite' => ['slug' => 'portfolio'],
// ...
]);
// プラグインのactivation時にフラッシュ
register_activation_hook(__FILE__, function() {
register_post_type('portfolio', [...]);
flush_rewrite_rules();
});
テーマの functions.php でカスタム投稿タイプを登録した場合は、パーマリンク設定画面で一度「保存」するだけでリライトルールが更新されます。
ステップ6:マルチサイトのパーマリンク
# マルチサイトではサブサイトごとにフラッシュが必要
wp rewrite flush --hard --url=https://sub.example.com
注意事項
.htaccessを手動編集する場合は必ずバックアップを取ること- WordPress が
.htaccessに書き込めるようにパーミッションが644以上必要(chmod 644 .htaccess) - Nginx はリスタートしないと設定が反映されません(
sudo nginx -s reload)
まとめ
パーマリンクの問題はまず wp rewrite flush --hard で解決します。解決しない場合はmod_rewriteの有効化と AllowOverride All の設定を確認してください。カスタム投稿タイプの場合はプラグイン有効化フックで flush_rewrite_rules() を呼ぶことが重要です。