パーマリンクの使い方

パーマリンクとは、ブログの個々の投稿、カテゴリーなどの投稿一覧ページへの恒久的 (半永久的) な URL です。
パーマリンクは、他のブロガーがあなたの記事やセクションにリンクを張るときや、投稿へのリンクを Eメールで送ったりするときに使います。
個別の投稿への URL は常に存在して決して変わらないようにすべきです。
そのため、「perma」リンクと呼ばれます。

パーマリンクの形式

WordPress の基本的なパーマリンク形式は以下の3種類です。

トップ ↑

デフォルト:”Ugly”

デフォルトでは、投稿 ID が N のときに

http://example.com/?p=N

のようになります。すべてのサーバ環境で動くように、新規インストール時のデフォルトはこうなっています。

トップ ↑

mod_rewrite: “Pretty パーマリンク”

mod_rewrite や lighttpd を使用すると、より良いパーマリンクにすることができます (詳しくは ブログ入門 をご覧ください)。フォーマットは様々ですが、最も一般的で汎用性が高いのは次のような形です。

http://example.com/2012/post-name/

あるいは

http://example.com/2012/12/30/post-name

Pretty パーマリンクは、以下の環境で利用できます。

トップ ↑

PATHINFO: “Almost Pretty”

PATHINFO パーマリンクは mod_rewrite パーマリンクによく似ています が、一つだけ例外があり、次のような形で途中に /index.php が挿入されます。

http://example.com/index.php/yyyy/mm/dd/post-name/

それ以外は “pretty” mod_rewrite と変わりなく、柔軟さも同じです。
/index.php の部分のおかげで、 mod_rewrite パーマリンクでできることは、PATHINFO パーマリンクでも実現可能です。

トップ ↑

管理画面の「設定」→「パーマリンク設定」で、 一般的な設定から1つを選択するか、構造タグを使用して「カスタム構造」フィールドに記述することができます。

注: パーマリンクの欄には、サイト URL を決して入れないでください。構成タグあるいは構成タグの組み合わせのみを使用してください。

PATHINFO パーマリンクを有効にするには、パーマリンク構造が index.php/ で始まるようにします。

トップ ↑

構造タグ

“Pretty” あるいは “Almost Pretty” パーマリンクをカスタマイズするために、以下の構造タグを使用できます。

ヒント

  • パーマリンクの欄には、サイト URL を決して入れないでください。構成タグあるいは構成タグの組み合わせのみを使用してください。
  • 構造は必ず %post_id% あるいは %postname% で終了し、各パーマリンクが個々の投稿を指すようにしてください (例 /%year%/%monthnum%/%day%/%postname%/ )。

%year%
投稿された年を4桁で取得します。例えば、2018です。

%monthnum%
投稿された月を取得します。例えば、05です。

%day%
投稿された日を取得します。例えば、28です。

%hour%
投稿された時 (時間) を取得します。例えば、15です。

%minute%
投稿された分を取得します。例えば、43です。

%second%
投稿された秒を取得します。例えば、33です。

%post_id%
投稿の固有IDを取得します。例えば、423です。

%postname%
投稿名 (投稿 / 固定ページ編集パネルのスラッグ) を取得します。例えば、「This Is A Great Post!」というタイトルであれば、「this-is-a-great-post」というURIになります。

%category%
カテゴリー名 (カテゴリー新規追加 / 編集パネルのスラッグ) を取得します。サブカテゴリーは入れ子になったURIとなります。

%author%
投稿の作成者を取得します。

トップ ↑

カテゴリーベースとタグベース

カテゴリーベースとタグベースは、カテゴリー / タグアーカイブのパーマリンクの前に置かれます。

 example.net/wp/category_base/category_name
 example.net/wp/tag_base/tag_name

カテゴリーベースのデフォルト値は category です。タグベースのデフォルト値は tag です。値を変更することはできますが、URLから取り除くことはできません。

これらのパーマリンクはほとんどのシステムで問題なく動作しますが、問題が生じる環境もあります。

トップ ↑

複数カテゴリにした投稿の %category% と %tag%

一つの投稿に複数カテゴリを指定していても、パーマリンクには一つしか表示できません。カテゴリはアルファベット順に並べられ、サブカテゴリの各グループでもアルファベット順になります (カテゴリ管理 参照)。投稿には、どのカテゴリからもアクセスできます。

パーマリンクに表示するカテゴリを選択する場合は、WP Category Permalink プラグインを試してください。

トップ ↑

“Pretty” パーマリンクの使い方

要件:

  • mod_rewrite モジュールがインストールされた Apache ウェブサーバー
  • WordPress のホームディレクトリで、
    • FollowSymLinks オプションが有効になっている。
    • FileInfo directives が許可されている (例: AllowOverride FileInfo あるいは AllowOverride All)。
    • .htaccess ファイルが存在する (存在しない場合は、”pretty” パーマリンクを有効にしたときに、WordPress は .htaccess ファイル作成を試みます)。
    • .htaccess ファイルを自動的に更新するには、WordPress が書き込み権限を持っている必要があります。
  • 優れた同時実行性、高パフォーマンス、低いメモリ使用量を目的としたWebサーバーであるnginxの場合、サーバーブロック内に次の location ブロックを追加します:
location / {
try_files $uri $uri/ /index.php?$args;
}
  • セキュリティに重点を置いたHiawatha Webサーバーの場合は、次のURLツールキットを使用します:
UrlToolkit {
ToolkitID = wordpress
RequestURI exists Return
Match .*\?(.*) Rewrite /index.php?$1
Match .* Rewrite /index.php
}
  • WordPressをローカルで実行しているMacユーザーは、httpd.confファイルを開き、 “/ Library / WebServer / Documents” ディレクトリに対して、AllowOverride を All に指定する必要があります。Mac OS X 10.5.x以降では、このファイルは /private/etc/apache2/users/[your-username].conf にあります。それ以外の場合は、 / etc / httpd / httpd.conf にあります。

“pretty” パーマリンク構造を作成または更新する時、WordPress は書き換え規則を生成し、.htaccess ファイルの適切な箇所に挿入します。挿入できなかった場合、「.htaccess を更新する必要があります」のようなメッセージが表示され、ファイルにコピー&ペーストする (ファイルの最後に付け足す) 書き換え規則が表示されます。

WordPress は内部で書き換え作業を行うので、この作業は一度行うだけで済みます。WordPress のホームディレクトリ (サイトアドレス) を移動させるときは、この作業を再度行う必要があるでしょう。

WordPress は既存の .htaccess と共存できます。既存の書き換え規則や他のディレクティブを削除しません。他に mod_rewrite 規則がある場合は、WordPress の規則よりも前に記述してください。

トップ ↑

.htaccess ファイルはどこ?

WordPress の index.php と .htaccess ファイルは、一般設定のサイトアドレス (URL) で指定されたディレクトリに一緒に置く必要があります。ファイル名がドットで始まるため、FTPクライアントソフトウェアでは、隠しファイルを含む全ファイルを表示するように設定していないと、ファイルが見えないかもしれません。 一部のホスティングサービス (例: GoDaddy) では、GoDaddy ホスティング接続インストールを利用して WordPress をインストールした場合、.htaccess が表示されず、編集することもできません。

トップ ↑

.htaccessの作成と編集

.htaccess ファイルが存在しない場合は、新規作成してください。シェルあるいは ssh アクセスでサーバーにアクセスできる場合は、touch .htaccess コマンドで作成することができます。FTP を用いてファイル転送する場合は、ローカルコンピュータ上で 1.htaccess のような名前でファイルを作成し、WordPress ディレクトリのルートにアップロードし、.htaccess にリネームしてください。

.htaccess ファイルは、FTP、シェル、あるいは (設定されていれば) ホスティングサービスの 管理パネル から編集することができます。

.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

.htaccess ファイルにサイトをダウンさせるエラー(”Internal Server Error (500)”)が含まれている場合は、FTP またはホスティングサービスの管理パネル を使用して欠陥のある .htaccess ファイルを削除する必要があります。

トップ ↑

.htaccessの自動更新

WordPress が .htaccess ファイルを自動更新できないときは、設定 → パーマリンク画面の下部に「あなたの .htaccess が書き込み可能ならこの操作は自動的に行われますが、そうでない場合は…」というメッセージが表示されます。

WordPress に自動更新させたい場合は、ファイルパーミッションの変更 が必要になります。 適切なパーミッションは、お使いのサーバーの設定によって異なります。まずは所有者に書き込み権限を与えて試してください。駄目なら次はグループ、その次は全ユーザーに書き込み権限を与えて試してください。WordPress がファイル編集できるようになったら、書き込み権限をそれ以上付与しないでください。

パーマリンクを適用した後は、他者が .htaccess にアクセスするのを防ぐために、660 あるいは 644 のような制限の厳しいパーミッションに変更してください。

トップ ↑

パーマリンクについての問題点と対処法

トップ ↑

.htaccess 生成時の問題

WordPress のインストール時に.htaccess ファイルが生成されない場合や、既存の .htaccess ファイルに新しい規則が追加されない場合は、いろいろな原因が考えられます。以下の手順を上から順に1つずつ、問題が解決しない場合のみ次のステップに進む方式で実行してください。

  1. ファイルパーミッションの変更:WordPress ビルトインエディタで .htaccess ファイルを編集するには、.htaccess のパーミッションを 666 に変更する必要がありますが、この方法はお薦めできません。あなたのブログのユーザーで、テンプレート編集権限を持つユーザーなら誰でも .htaccess を編集できてしまうからです。パーミッションをサーバーが書き込み可能な 660 に変更することもできますが、同様の制限があります。
  2. サーバーブロック:ホスティングサービスによって SERVER_SOFTWARE 変数がブロックされているため、WordPress が .htaccess を生成できていない可能性があります。サーバー上で Apache が実行されていることが確かであれば、wp-includes/vars.php ファイルを変更することで、Apache が実行されていると WordPress に思い込ませることができます。これらの変更を実装するには、以下の手順を行ってください。
    • WordPress 管理パネルのビルトイン・エディタを使用して wp-includes/vars.php を開きます。WordPress にログインし、「管理」をクリックし、「ファイル」をクリックし、画面を下までスクロールし、「その他のファイル」テキストボックスで wp-includes/vars.php と入力してください。
      $is_apache = strstr($_SERVER[‘SERVER_SOFTWARE’], ‘Apache’) ? 1 : 0;
      という部分を探して、
      // $is_apache = strstr($_SERVER[‘SERVER_SOFTWARE’], ‘Apache’) ? 1 : 0;
      に置き換えてください。
    • 次の部分の下に一行追加し、
      // $is_apache = strstr($_SERVER[‘SERVER_SOFTWARE’], ‘Apache’) ? 1 : 0;
      次のように入力してください。
      $is_apache = 1;
  3. XAMPP (Windows) を利用する場合: XAMPP のバージョンによっては、デフォルトでは mod_rewrite が有効になっていません (Apache でコンパイルはされています)。mod_rewrite を有効にし、WordPress が pretty パーマリンク作成するのに必要な規則を .htaccess に書き込みできるようにするには、apache/conf/httpd.conf を開き、LoadModule rewrite_module modules/mod_rewrite.so の行のコメントを外す (行頭の「#」を消す) 必要があります。
  4. WAMP (Windows) を利用する場合: WAMPのいくつかのバージョン (すべてのバージョン ?) では、 mod_rewrite が有効になっておらず、デフォルトでシンボリックリンクが許可されていません。必要な機能を有効にするには、apache/conf/httpd.confファイルをテキストエディタで開いて、LoadModule rewrite_module modules / mod_rewrite.soのコメントを解除します (行頭の「#」を消す)。次に、同じファイルのさらに下に、「Options FollowSymlinks」という行で始まるセクションがあります。そのセクションの2行目を「AllowOverride none」から「AllowOverride all」に変更します。編集したhttpd.confを保存し、すべてのWAMPモジュールを再起動します。これでパーマリンクが機能するはずです。

トップ ↑

ヒントと小技

トップ ↑

アーカイブリンクとして解釈されるのを避ける

一日に一投稿しか公開しないので %year%%monthnum%%day% というパーマリンクを使用したいと思うかもしれませんが、このリンクはその日の全投稿のアーカイブとして生成されることに注意してください。個別投稿へのリンクは、少なくとも %year%%monthnum%%day%%hour% にする必要があります。

トップ ↑

パーマリンク構造をチェックする

ブログにパーマリンク構造があるかどうかチェックするには、以下のコードを使用します。

<?php if ( get_option('permalink_structure') ) { echo 'permalinks enabled'; } ?>

トップ ↑

参考

この記事は役に立ちましたか ? どうすればさらに改善できますか ?