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() を呼ぶことが重要です。

お気軽にご相談ください

お見積りへ お問い合わせへ