はじめに
デフォルトの設定では、ItemIDが1の場合、URLは http://www.example.jp/index.php?itemid=1 ですが、FancyURL-2化し、その後CustomURL化すると、以下の通りシンプルなURLでアクセス可能となります(CustomURL化するためには、まずFancyURL-2化する必要があります)。
- FancyURL-2
-
http://www.example.jp/item/1/catid/1
- CustomURL
-
http://www.example.jp/item_1.html
事前確認
Apacheにてmod_rewriteが利用可能なことが条件なのでまずはその確認を行います。
mod_rewriteはリバースプロキシサーバで主に使用される機能で、例えば静的コンテンツと動的コンテンツでサーバを分ける際などに利用する機能ですが、ここでは自サーバ宛のURLを書き換えるために使用します。
www:/var/www/example# ls /etc/apache2/mods-enabled/*write* ls: cannot access /etc/apache2/mods-enabled/*write*: そのようなファイルやディレクトリはありません www:/var/www/example# ls /etc/apache2/mods-available/*write* /etc/apache2/mods-available/rewrite.load
a2enmodでシンボリックリンクを張ります。
www:/var/www/example# a2enmod rewrite Enabling module rewrite. Run '/etc/init.d/apache2 restart' to activate new configuration! www:/var/www/example# ls /etc/apache2/mods-enabled/*write* /etc/apache2/mods-enabled/rewrite.load www:/var/www/example# /etc/init.d/apache2 restart
Fancyurl-2の設定
apacheの設定
本ページの末尾に載せている参考文献のNucleusでつくる!最強のブログサイトでは、インストールしたディレクトリにある「extra」ディレクトリ→「fancyurls-2」ディレクトリの「.htaccess」をインストールしたディレクトリにコピーするという手順が示されていますが、.htaccessを利用するためにはAllowOverride allの設定が必要であり、さらに.htaccessだとRewriteLogによるURL書き換えログの出力が使用できないため、以下の通りApache2の設定ファイルを修正します。
www:/var/www/example# vi /etc/apache2/sites-available/01-example-www <Directory /var/www/example> Options FollowSymLinks AllowOverride None Order allow,deny allow from 192.168.0.0/255.255.255.0 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?virtualpath=$1 [L,QSA] </IfModule> </Directory> RewriteLog "/var/log/apache2/fqdn/example/rewrite.log" RewriteLogLevel 9 ←アクセス時のURL書き換えのログを確認後、0にすることでログ出力を止めます。
- <IfModule mod_rewrite.c>
-
mod_rewrite.c(mod_rewrite)が有効な場合処理を行うという意味になります。当サイトでは有効なので処理を行います。
- RewriteEngine on
-
mod_rewriteの処理を有効に設定します。
- RewriteCond~
-
置き換え(RewriteRule)処理を行う条件を設定します。
! 文字列の前につけることで、マッチしないパターンを指定
-d 指定したディレクトリが存在すればtrue
-f 指定したファイルが存在すればtrue
なので、リクエストのあったURLのファイルorディレクトリが無い場合に、後に続くRewriteRuleを適用します。 - RewriteRule
-
実際の置き換えルールになります。
[QSA]…クエリ文字列部分を追加します。この時、マッチした部分が、$1の換わりに使用されます。
[L]…条件にマッチした場合そこで判定を終了します(以下に続くRewriteRuleを評価しない)
ログの確認については後述しますが、URLを除いたパスが$1に格納されます。
最後にapacheの再起動をします。
www:/var/www/example# /etc/init.d/apache2 restart Restarting web server: apache2 ... waiting . www:/var/www/example#
Nucleus側の設定
まず、Nucleusをインストールしたパスにあるindex.phpを修正します。
www:/var/www/example# vi index.php $CONF = array();$CONF['Self'] = 'index.php';$CONF['Self'] = 'http://www.example.jp'; include('./config.php');
管理エリアのグローバル設定においてURLモードを「FancyURLモード」に変更してFancyURL-2化は終了です(プラグインのインストールは不要です)。
URL変換した際のログを確認
FancyURL化されたリンクをクリックします。
(例)http://www.example.jp/item/1/catid/1に一回アクセスした際のログを以下に載せておきます。
www:/var/www/example# tail -100 /var/log/apache2/fqdn/example/rewrite.log … (時間やIP等は割愛) add path info postfix: /var/www/example/item -> /var/www/example/item/1/catid/1 strip per-dir prefix: /var/www/example/item/1/catid/1 -> item/1/catid/1 applying pattern '^(.*)$' to uri 'item/1/catid/1' RewriteCond: input='/var/www/example/item' pattern='!-f' => matched RewriteCond: input='/var/www/example/item' pattern='!-d' => matched rewrite 'item/1/catid/1' -> 'index.php?virtualpath=item/1/catid/1' split uri=index.php?virtualpath=item/1/catid/1 -> uri=index.php, args=virtualpath=item/1/catid/1 add per-dir prefix: index.php -> /var/www/example/index.php strip document_root prefix: /var/www/example/index.php -> /index.php internal redirect with /index.php [INTERNAL REDIRECT] strip per-dir prefix: /var/www/example/index.php -> index.php applying pattern '^(.*)$' to uri 'index.php' RewriteCond: input='/var/www/example/index.php' pattern='!-f' => not-matched pass through /var/www/example/index.php
本サーバにはitem/1/catid/1 というファイルもディレクトリも無いので、http://www.example.jp/index.php?virtualpathがitem/1/catid/1というリクエストに変換されています。
www:/var/www/example# vi /etc/apache2/sites-available/01-example-www RewriteLog "/var/log/apache2/fqdn/example/rewrite.log" RewriteLogLevel 0 www:/var/www/example# /etc/init.d/apache2 restart www:/var/www/example#
RewriteLogLevel 0にして、以降はログの出力がされないようにしておきます。
CustomURL化
CustomURLプラグインのインストール
NucleusWikiからダウンロードしてきた「NP_CustomURL0-0.3.7_fix3.zip」を解凍して、「NP_CustomURL.php」と「customurl」ディレクトリを /var/www/example/nucleus/plugins/にアップロードし、再度、index.phpを編集します。
www:/var/www/example# vi index.php $CONF = array();$CONF['Self'] = 'http://www.example.jp';$CONF['Self'] = ''; include('./config.php');
次に、Nucleusの管理画面からCustomized URLプラグインをインストールします。
以上で、CustomURL化も終了です。FancyURL-2化時点では
http://www.example.jp/item/1/catid/1
というURLだったページが、CustomURL化により
http://www.example.jp/item_1.html
でアクセス可能となりました。
- 参考文献
-
Nucleusでつくる!最強のブログサイトのp.309~314