オープンソースCMSのMODxには、静的ページのようなURIで運用するためのフレンドリーURLという機能があります。これによって、CMSであることを意識せずにドキュメントへアクセスできるようになりますが、通常のフレンドリーURLは、1つのドキュメントに複数のURIが存在するのと同じ状態になってしまいます。また、スニペットによっては出力されるURIの形式も異なる場合もあることから、訪問者を混乱させたり、検索エンジンにクローンページと認識されてしまう原因になります。
SEO Strict URLsというプラグインを導入すると、1つのドキュメントに対しては1つのURIのみが割り当てられるようになり、通常のフレンドリーURLでアクセスできるURIへのアクセスがあった場合には、割り当てられた一意のURIにリダイレクトされるようになります。また、スニペットやプラグインによって出力されるURIを含め、ドキュメント中にあるサイト内のURIは自動的に一意のURIに書き換えられます。
ここでは、SEO Strict URLsに.htaccessによるmod_rewriteを組み合わせることによって、通常のサイトのようなURI構成を実現する方法を説明します。この手順を踏むことによって、ドキュメントのURIの一意化に加え、フォルダドキュメントに「http://ドメイン/エイリアス/index.html」でもアクセスできるようになります。
次の手順で、MODxのフレンドリーURLの設定を変更します。
現在のMODx(0.9.6)ではフレンドリーURLに関する不具合があるため、「フレンドリーURLの接頭辞」、「フレンドリーURLの接尾辞」は設定しない方が無難である。この場合、エイリアスがディレクトリ名、ファイル名と同じになるため、管理しやすいという利点もある。
SEO Strict URLsプラグインをダウンロードしてインストールします。(プラグインの作成)
SEO Strict URLsにはいくつかの不具合がある。SEO Strict URLsプラグイン(Phize版)ではこれらの不具合を修正している。
Webサイトへのドメイン名でのアクセスを「www」なし・「www」付きのどちらかで統一するために、MODxのトップディレクトリにある.htaccessを修正します。
「www」なしで統一する場合は、# Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
の直後にあるコメント(#
)を削除し、サイトに合わせたドメインに書き換えます。
RewriteEngine On
RewriteBase /
# Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com [NC]
RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
「www」付きで統一する場合は、# or for the opposite domain.com -> www.domain.com use the following
の後にあるコメント(#
)を削除し、サイトに合わせたドメインに書き換えます。
# or for the opposite domain.com -> www.domain.com use the following
# >>> DO NOT USE BOTH THE ABOVE AND BELOW <<<
#
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.example-domain-please-change\.com [NC]
RewriteRule (.*) http://www.example-domain-please-change.com/$1 [R=301,L]
この修正は、ドメインとサーバで「www」なし・「www」付きの両方のURIで同じWebサイトへアクセスできるように設定している場合にのみ必要である。それ以外の場合には、アクセスできるURIは元から一つしかないので修正する必要はない。
次に、フォルダドキュメントに「http://ドメイン/エイリアス/index.html」でもアクセスできるようにするために、# The Friendly URLs part
の直後に次の3行を追加します。
# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/index.html$ index.php?q=$1 [L,R=301,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
mod_rewriteが使えない場合、次のような手順で対応できる。
ただし、DittoやWayfinderのようなリスティング系のスニペット・プラグインを使う場合には、リダイレクト用のドキュメントのリストが出力されないように注意する必要がある。
ドキュメントの編集ページの「全般」タブの「ドキュメントエイリアス」に、拡張子を含めたファイル名を設定するようにします。通常のドキュメント、フォルダドキュメントともに、フレンドリーURLでアクセスできる全てのURIにアクセスされた場合には、ここで設定したURIへリダイレクトされます。
「page.html」というエイリアスを設定した場合、ドキュメントのURIは「http://ドメイン/page.html」という形式になります。子ドキュメントを持ちたい場合や「http://ドメイン/エイリアス/」という形式のURIで運用したい場合は、「ページ設定」タブの「フォルダ?」にチェックを付け、フォルダドキュメントに設定します。「folder」というエイリアスを設定した場合、フォルダドキュメントのURIは「http://ドメイン/folder/」という形式になり、「http://ドメイン/folder/index.html」にアクセスされた場合にもこのURIへリダイレクトされます。