NP_CustomURLの設定

投稿者: | 2010年12月12日
Pocket

はじめに

デフォルトの設定では、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
でアクセス可能となりました。

参考文献

NucleusWiki

bnoteさんのサイト

Nucleusでつくる!最強のブログサイトのp.309~314

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です