- サイトデザイン工事中です。ご意見をお寄せください。
- 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細)
パーマリンクの使い方
目次 |
パーマリンクとは、ブログの個々の投稿、カテゴリーなどの投稿一覧ページへの恒久的(半永久的)な URL です。パーマリンクは、他のブロガーがあなたの投稿やセクションにリンクを張るときや、投稿へのリンクを Eメールで送ったりするときに使います。個別の投稿への URL は常に存在して決して変らないようにすべきです。そういう訳で、「perma」リンクといいます。
パーマリンクの形式
WordPress の基本的なパーマリンク形式は以下の3種類です。
デフォルト: "Ugly"
N
のときに http://example.com/?p=Nのようになります。全てのサーバ環境で動くように、新規インストール時のデフォルトはこうなっています。しかしながら、他のオプションが付くと見苦しくなるので好ましくありません。
mod_rewrite: "Pretty パーマリンク"
mod_rewrite や lighttpd を使用すると、より良いパーマリンクにすることができます。フォーマットは様々ですが、最も一般的で万能なのは次のような形です。
http://example.com/category/post-name/
あるいは
http://example.com/year/month/day/post-name
短いパーマリンクにするために、日付の要素(日・月・年)の全部か一部を取り除く人もいます。
Pretty パーマリンクは、以下の環境で利用できます。
- Apache、mod_rewrite モジュール有り
- Microsoft IIS 7+、URL Rewrite 1.1+ モジュール有り、PHP 5 が FastCGI として動作
- Microsoft IIS 6+、ASAPI_Rewrite を使用
- Lighttpd、404 handler あるいは mod_rewrite を使用 (参考を参照)
PATHINFO: "Almost Pretty"
PATHINFO
パーマリンクは、途中に /index.php
が挿入されるという差異の他は、mod_rewrite
パーマリンクによく似ています。
http://example.com/index.php/yyyy/mm/dd/post-name/
のようになります。それ以外は "pretty" mod_rewrite
と変わりなく、柔軟さも同じです。mod_rewrite
パーマリンクができることは、/index.php
の部分のおかげで PATHINFO
パーマリンクでも可能です。
使用しているパーマリンクの形式および WordPress が使用している内部書き換え規則の詳細を表示する便利なプラグインがあります。
パーマリンク構造の選択
「管理画面の設定 → パーマリンク設定」 (WordPress 2.5 以前では「オプション → パーマリンク設定」) で、 一般的な設定から1つを選択するか、構造タグを使用して、カスタム構造に記述することができます。
注: パーマリンクの欄には、サイト URL を決して入れないでください。構成タグあるいは構成タグの組み合わせのみを使用してください。
PATHINFO
パーマリンクを有効にするには、パーマリンク構造がindex.php/
で始まるようにします。
カテゴリーベースとタグベース
カテゴリーベースとカテゴリーベースは、カテゴリー/タグアーカイブのパーマリンクの前に置かれます。
example.net/wp/category_base/category_name example.net/wp/tag_base/tag_name
カテゴリーベースのデフォルト値は、category
です。タグベースのデフォルト値は、tag
です。値を変更することはできますが、取り除くことはできません。
これらのパーマリンクはほとんどのシステムで問題なく動作しますが、問題が生じる環境もあります。
複数カテゴリにした投稿の %category%
と %tag%
一つの投稿に複数カテゴリを指定していても、パーマリンクには一つしか表示できません。一番小さいカテゴリ ID(カテゴリ管理 参照)が使われます。アクセスはどのカテゴリからでも普通にできます。
パーマリンク構造に %tag% を使用している場合も、同様です。
"Pretty" パーマリンクの使い方
要件:
- mod_rewrite モジュールがインストールされた Apache ウェブサーバー
- WordPress のホームディレクトリで、
- FollowSymLinks オプションが有効にななっている。
- FileInfo directives が許可されている (例
AllowOverride FileInfo
あるいはAllowOverride All
)。 .htaccess
ファイルが存在する (存在しない場合は、"pretty" パーマリンクを有効にしたときに、WordPress は.htaccess
ファイル作成を試みます)。.htaccess
ファイルを自動的に更新するには、WordPress が書き込み権限を持っている必要があります。
- lighttpdについては、外部資料 を参照してください。
- Mac Users running WordPress locally must edit their httpd.conf file editing the AllowOverride line to read AllowOverride All in the Directory "/Library/WebServer/Documents" host instructions. For Mac OS X 10.5.x and up this file is located in /private/etc/apache2/users/[your-username].conf, otherwise it is located at /etc/httpd/httpd.conf.
"pretty" パーマリンク構造を作成する (更新する) とき、WordPress は書き換え規則を生成し、適切な .htaccess
ファイルに挿入します。挿入できなかった場合、「.htaccess
を更新する必要があります」のようなメッセージが表示され、ファイルにコピー&ペーストする (ファイルの最後に付け足す) 書き換え規則が表示されます。
WordPress 2.0以降では、WordPress が内部で書き換え作業を行うので、この作業は一度行うだけで済みます。WordPress のホームディレクトリ (ブログのアドレス) を移動させるときは、この作業を再度行う必要があるでしょう。
WordPress は既存の .htaccess
と共存できます。既存の書き換え規則や他の指示を削除しません。他に mod_rewrite
規則がある場合は、WordPress の規則よりも前に記述してください。
.htaccess
ファイルはどこ?
WordPress の index.php
と .htaccess
ファイルは一般設定のブログのアドレス (URI) 設定で指示されたディレクトリに置く必要があります。ファイル名がドットで始まるため、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 / 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 のような制限の厳しいパーミッションに変更してください。
mod_rewrite なしでのパーマリンクの設定
"Pretty" パーマリンクには、通常は mod_rewrite
が必要です。(Windows サーバーでよく使われている) IIS は、mod_rewrite
をサポートしていません (Windows 上で Apache 2.0.54
を使用している場合は、apache\conf\httpd.conf
で有効にすることにより、mod_rewrite
が動作するかもしれません) 。
IIS 7 を使用していて、サーバーの管理者権限をもっている場合は、マイクロソフト社の URL Rewrite Module で代替可能です。mod_rewrite と全く同じとはいきませんが、WordPress の pretty パーマリンクをサポートしています。インストールしたら WordPress フォルダの web.config ファイルを開き、次のルールを system.webServer に追加してください。
<rewrite> <rules> <rule name="Main Rule" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="index.php/{R:0}" /> </rule> </rules> </rewrite>
IIS のウェブサイトに インストールガイド が掲載されています。このモジュールは、x64 および x86 システムで利用可能です。
この方法が使えない場合は、PATHINFO
パーマリンクを試してみてはいかがでしょう。パーマリンク構造の最初に、index.php/
と記述してください。
/index.php/%year%/%monthnum%/%day%/%postname%/
この方法は、常に上手くいくとは限りません。特に IIS 6 上で WordPress を実行している場合はそうです。IIS 上でこの方法を用いるには、php.ini
ファイルに次の2行を追加して、webroot に置いてください。
cgi.fix_pathinfo = 1 cgi.force_redirect = 0
その他にも、IIS のカスタム 404 リダイレクトを使用する方法があります。この方法は、カスタム 404 リダイレクトを追加する権限が必要ですが、サードパーティ製の mod_rewrite
をインストールする必要がありませんし、パーマリンク構造を /index.php/
で始める必要もありません。
パーマリンクについての問題点と対処法
.htaccess
生成時の問題
WordPress のインストール時に.htaccess
ファイルが生成されない場合や、既存の .htaccess
ファイルに新しい規則が追加されない場合は、いろいろな原因が考えられます。以下の手順を1つずつ実行してください。もし問題が解決しない場合は次のステップに進んでください。
- ファイルパーミッションの変更。 WordPress ビルトインエディタ/en で
.htaccess
ファイルを編集するには、.htaccess
のパーミッションを 666 に変更する必要があります。しかしこの方法はお薦めできません。あなたのブログのユーザーで、テンプレート編集権限を持つユーザーなら誰でも.htaccess
を編集できてしまうからです。パーミッションをサーバーが書き込み可能な 660 に変更することもできますが、同様の制限があります。 - サーバーブロック。 ホスティングサービスによって
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;
- WordPress 管理パネルのビルトイン・エディタを使用して
- XAMPP (Windows) を利用する場合。XAMPP のバージョンによっては、デフォルトでは
mod_rewrite
が有効になっていません (コンパイルはされています)。mod_rewrite
を有効にし、さらに WordPress が pretty パーマリンク作成するのに必要な規則を.htaccess
に書き込みできるようにするために、apache/conf/httpd.conf
を開き、LoadModule rewrite_module modules/mod_rewrite.so
の行のコメントを外す (行頭の「#」を消す) 必要があります。
パーマリンク&.htaccess と Microsoft FrontPage
Microsoft FrontPage についてのメモ。いろいろなホスティング会社で構築され管理されている (共有および専用) サーバーの多くは、Apache ビルドと共に mod_frontpage
がコンパイルされています。そして多くの場合、各々の仮想サーバー上に FrontPage 拡張機能がインストールされています。最近では、ほとんどのホスティング会社がサーバービルドプロセスで使用する多く/ほとんどのバイナリーディストリビューションに、mod_frontpage
と FrontPage 拡張機能の両方が含まれています。たとえあなたが FrontPage を使用していないとしても、エクステンションが Apache と (そして httpd.conf
とも) 相互作用するため、WordPress インストール時に、(管理パネルは正しく動作しているが)500 エラーや、真っ白なページになってしまうのは、単にサーバー上に extensions/mod_frontpage
が存在するからです。
WordPress は、FrontPage 拡張機能がインストールされていても利用できます。しかし、パーマリンクは機能せず、管理画面からパーマリンクに少しでも変更を加えると、.htaccess
ファイルに mod_rewrite
を追加したために、FrontPage 拡張機能と衝突します。しかし、この問題には解決法があります。
FrontPage またはパーマリンクの応急処置
FrontPage の応急処置: パーマリンクは気にせず、MS FrontPage 拡張機能が動作するようにしたい場合は、.htaccess
ファイルを編集して、書き換え規則の WordPress の部分を削除します。
パーマリンクを使うには: (ホスティング会社が FrontPage 拡張機能をインストールしているが) 自分では必要ない場合。
自分またはホスティング会社が MS FrontPage 拡張機能を削除するか、.htaccess
ファイルからフロントページに関する行を全て取り除き、WordPress の mod_rewrite
だけを残す必要があります。
FrontPage とパーマリンクを共存させるには
最終的な解決策。
この件について、サポートフォーラムにいくつかのスレッドがあり、今まで解決していませんでした。
通常、MS FrontPage 拡張機能がインストールされた Unix サーバーでは、WordPress は正常に動作し、(FrontPage で) ページを編集し公開することができます。パーマリンクに変更を加えさえしなければ (例えば 2005/04/etc 等のように日付ベースにする等)。私はパーマリンクについて質問した人たちに、この種の URI 形式を勧めています。というのも、w3c が推奨している方法だからです (http://www.w3.org/Provider/Style/URIを参照)。
問題は、FrontPage が .htaccess
ファイルを使用して投稿およびウェブオーサリング設定を行うことです (WordPress の mode_rewrite 規則もこのファイルにアクセスする必要があります)。WordPress の mode_rewrite 規則が追加されると、以下の2つの事態が発生します。パーマリンクが動作しない、FrontPage 拡張機能が落ちる。
私はこの問題について何度となく試しました。FrontPage が使用する %{HTTP_USERAGENT)%
を無視すするように書き換え規則を用いる、httpd.conf
ファイルで2つ目のアクセスファイル .wpaccess
を使用する、等々です。FrontPage の使用と、WordPress のパーマリンクの使用の両方を満たすものはありませんでした。
解決策は実は簡単なものでした。私は偶然発見しました。
FrontPage を使用しているか使用したい場合 (あるいはホスティングパッケージでそのように設定されている場合)、WordPress と共存するには、自分またはホスティング会社が以下の手順を実行する必要があります。
MS FrontPage が次のディレクトリを作成する。
_vti_binそのディレクトリの下に
_vti_admと
_vti_autとを作成する
サイト (あるいは WordPress) のルートディレクトリだけでなく、これら全てのディレクトリに、.htaccess
ファイルを追加する。
これら3つのディレクトリとルートディレクトリの .htaccess
ファイルの先頭に次の1行を追加する。
Options +FollowSymlinks
既に次のように記述されていることがあります。
Options None
各 .htaccess
ファイルを編集して保存すれば完了です。FrontPage、選んだパーマリンク、全てが動作します。
長いパーマリンク
メール、コメント投稿やチャット等で、長いパーマリンクを使うと、途中で切断されたり、最初のセクションだけがリンクと認識されて残りの部分がテキストと認識されたりします。例えば、
http:⁄⁄yourdomain.example.com/2005/10/4/article-about-joe-fred-sally-and-bog
が下のようになります。
http:⁄⁄yourdomain.example.com/2005/10/4/article-about-joe-fred-sally-and-bog
この例の下側のリンクをクリックすると、「404 ページが見つかりません」エラーが発生するでしょう。長いパーマリンク投稿タイトルを使いたい場合は、この問題を避けるために以下の手順を実行してください。
- パーマリンクの使い方を使用していることを確認する。
-
.htaccess
ファイルを編集して、以下を追加する。RewriteRule ^post/([0-9]+)?/?([0-9]+)?/?$ /index.php?p=$1&page=$2 [QSA]
- 試してみる。投稿 ID を調べて、ブラウザで以下のように記述する (ID の部分はあなたの環境に合わせる) と、リダイレクトされるはずです。
http://yourdomain.example.com/post/(the ID #)
ほとんどのメール閲覧ソフトは、山括弧 (< と >) で囲まれた URL を切断しません。メールに URL を貼り付ける場合は、以下のように書くと良いでしょう。
私のブログ投稿 <http:⁄⁄yourdomain.example.com/2005/10/4/article-about-joe-fred-sally-and-bog>
をごらんください。
さらに、メールクライアントによっては、テキスト形式メールを作成するときに「プリフォーマット」オプションが用意されています。リンクを貼り付けるときに「プリフォーマット」オプションを使用すると、リンクの間に改行を含まないようにすることができます。
その他の問題点
.htaccess
ファイルが正しく生成されているにも関わらずパーマリンクが動作しない場合は、以下のような問題が発生しているかもしれません。問題が解決しない場合は、 WordPress Forum の "How To" (日本語フォーラムは WordPress フォーラムの「使い方全般」)に投稿してください。
- AllowOverride が無効
あなたのサーバーでは、AllowOverride ディレクティブが有効になっていないかもしれません。Apache の httpd.config
ファイルで AllowOverride ディレクティブが None
に設定されている場合は、.htaccecc
ファイルは全く無視されます。この場合、サーバーは .htaccecc
ファイルを読むことすらしません。このディレクティブが All
に設定されている場合は、全ての .htaccecc
コンテキストが許可されます。httpd.config
ファイルで AllowOverride ディレクティブが有効になっている例を示します。
<Directory /> Options FollowSymLinks AllowOverride All </Directory>
ルートディレクトリでも、AllowOverride を有効にする必要があるかもしれません。
<Directory /var/www/html> # ... other directives... AllowOverride All </Directory>
サイトの AllowOverride 設定も変更する必要があるかもしれません。Mac OS X サーバーの場合は必ず行う必要がりますが、他のシステムでも同様にする必要があるかもしれません。サイト設定ファイルは、通常 /etc/httpd/sites/
ディレクトリ内にあります。
(上の例では all に設定していますが) AllowOverride を all に設定したくない場合は、AllowOverride のリストに、FileInfo ディレクトリを含める必要があります。httpd.config
の設定を変更後、それらを有効にするには、Apache サーバーを再起動する必要があります。どのような上書きが許可されるかについては、Apacheコア機能を参照してください。
- ページナビゲーションが動かない。
投稿の2ページ目やそれ以降へのナビゲーションが期待通りに動作しないことがあるかもしれません。例えば、投稿へのリンクに以下のいずれかの URI を生成しているとします。
http://www.example.com/page/2/ http://www.example.name/category/categoryname/page/2/ http://www.example/year/month/day/page/2/ http://www.example/year/month/page/2/
これらのリンクをクリックすると、ページが読み込まれ、投稿以外のもの (ヘッダー、フッター、サイドバー) しか表示されず、「該当する投稿は見つかりませんでした」というエラーメッセージが出てくることがあります。
これは、WordPress が生成する .htaccess
が存在しないからです。これを修正するには .htaccess
を削除して、再度作成します。
- 管理パネルで、「管理」「ファイル」と進む。(ファイルの編集/en)
.htaccess
ファイルへのリンクをクリックして、編集する。- テキストエディタで、ファイルの内容をコピーして貼り付ける。これは、
.htaccess
ファイルにリダイレクトやアクセス拒否等が手動で書き込まれている場合に備えておくためです。便利な .htaccess トリック .htaccess
ファイルの全ての内容を削除し、「ファイル更新」ボタンをクリックする。- 管理パネルで、「オプション」「パーマリンク」と進む。
- 「パーマリンク構造の更新」ボタンをクリックして、新たに書き換え規則を生成する。.
- 以前は動作しなかったリンクを用いて試してみる。
- あなたの
.htaccess
ファイルに記載されていたエントリを書き込む (# BEGIN WordPress
の前か、# END WordPress
の後に追加してください)。
.htaccess
ファイルをサーバーから削除し、新たに .htaccess
ファイルを作成し、パーミッションを 666 に変更し、「オプション」「パーマリンク」で「パーマリンク構造の更新」ボタンをクリックして新しい .htaccess
規則を生成することも可能です。
これでも上手くいかない場合は、WordPress サポートフォーラムのこの投稿 (英語) を参照してください。
- 固定ページへのパーマリンクが効かない。
新しく作成した固定ページへ移動するときにエラーが発生する場合は、パーマリンク設定を再度行う必要があるでしょう。WordPress で新たに固定ページを追加するたびに新しく書き換え規則を作成し、.htaccess
(WordPress 1.X) か、内部書き換え配列 (WordPress 2.X) を更新する必要があります。
- Ultimate Tag Warrior のタグページへのパーマリンクが効かない。
WordPress 2.X で UltimateTagWarrior プラグインを使用していてローカルタグ URL で 404 エラーが発生する場合は、WordPress の生成する内部書き換え規則がでしゃばり過ぎて UTW の書き換え規則よりも先に呼び出されるからです。この現象は通常、(/%postname%/
のような) カスタムパーマリンク構造を使用している時にのみ起こります。これを修正するには、パーマリンク設定を「日付と投稿名」にするか、UTW プラグインを改造して内部書き換え配列で UTW 書き換え規則を最初に配置するかします。
- パーマリンクは動くがページが存在しないと表示される。
PHP 4.4.x および 5.x のバージョンの一部には、Apache 2.X の一部のバージョン上で使用すると mod_rewrite
が落ちるバグがあります。 詳細は Bug #35059 Problems with PHP 4.4.1 and mod_rewrite および Bug #35096 using mod_rewrite with apache2 crashes を参照してください。
その他のヘルプ
これらの手順でうまくいかない場合は、Codex日本語版、FAQ/トラブルシューティング、あるいはサポートフォーラムで検索してください。 最後の手段として、バグの報告を行ってください。
ヒントと小技
投稿の末尾に .html
を付けるには
.html
を付けるには投稿の末尾に
.html
拡張子を付ける簡単な方法は、上で解説した構造タグを使用することです。適切な末尾を持つパーマリンクの例に従えば、次のルールで、http://example.com/2006/01/01/happy-newyear.html のような表記が得られます。
/%year%/%monthnum%/%day%/%postname%.html
これによって、静的な
.html
ファイルが生成されるわけではありません。.html
拡張子を付け足すだけであり、動的生成されることには変わりありません。こうすることの SEO 効果については議論されていますが、WordPress から移行しなければならないときには、URL 構造を保持したまま静的ファイルにできるので便利でしょう。
WordPress 2.3 以前ではカノニカル URL 機能が無かったので、 (訳注:原典では削除されている。フォーラムも参考に http://ja.forums.wordpress.org/topic/3128 --Mizuno 2010年8月2日 (月) 09:39 (UTC))
.html
を加えることは (URL を強制的に標準化することになり) 非常に有益でした。現在では SEO 効果があるとしても限られたものでしょう (詳細は外部資料を参照してください)。
アーカイブリンクとして解釈されるのを避ける
一日に一投稿しか公開しないので %year%%monthnum%%day%
というパーマリンクを使用したいと思うかもしれませんが、このリンクはその日の全投稿のアーカイブとして生成されることに注意してください。個別投稿へのリンクは、少なくとも %year%%monthnum%%day%%hour%
にする必要があります。
パーマリンク構造をチェックする
ブログにパーマリンク構造があるかどうかチェックするには、以下のコードを使用します。
if ( get_option('permalink_structure') != '' ) { echo 'permalinks enabled' }
参考
- 他の投稿へリンクする方法は投稿・ページ・カテゴリーへリンクする/ en の記事を参照してください。
- Lighttpd rewrite rules for WordPress 3.0 networks
外部資料
最新英語版: WordPress Codex » Using Permalinks (最新版との差分)