Rewriteを用いたサーチエンジン最適化

PukiWiki Adv.では、RewriteEngineを用いてアドレスを静的URLにすることが標準で可能です。Web上でサーバーの設定を操作できるCherokeeが一番簡単かも。

Apache

やり方は、.htaccessの

<IfModule mod_rewrite.c>
	RewriteEngine on
	RewriteCond %{REQUEST_FILENAME} -f [OR]
	RewriteCond %{REQUEST_FILENAME} -d
	RewriteRule ^.* - [L]
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule ^(.+)/$ index.php?$1 [L]
	RewriteRule ^(.+)\.html$ index.php?$1 [L]	# htmlファイルに偽装する場合
</IfModule>

のコメントを外して、pukiwiki.ini.phpの$static_urlを1にするだけです。これで、

http://example.com/?Foo%2FBar

のようなアドレスを

http://example.com/Foo/Bar

のような、わかりやすいアドレスにすることができます。ただし、Apacheはスペースなどを含むアドレスを正常に処理ができないため、部分的に無効化されます。

nginx

nginxを使用している場合、/etc/nginx/nginx.conf、あるいは、/etc/nginx/sites-enabled/内の指定された設定ファイルを弄る必要があります。

以下が推奨設定です。

server{
	listen			80;
	server_name		[サーバー名];
	root			/var/www;
	index			index.php;

	location / {
		error_page      404 = @pukiwiki;
		log_not_found   off;
	}

	location @pukiwiki {
		rewrite ^/(.+)$		/index.php?$1	last;
		rewrite ^/(.+)/$	/index.php?$1	last;	# ディレクトリに偽装
		rewrite ^/(.+)\.html$	/index.php?$1	last;	# htmlファイルに偽装する場合のみ
		break;
	}

	location ~ \.php$ {
		fastcgi_pass	127.0.0.1:9000;
#		server		unix:/var/run/php-fpm.socket;	# ソケット通信の場合
		fastcgi_index	index.php;
		fastcgi_param	SCRIPT_FILENAME  /var/www$fastcgi_script_name;	# $document_root$fastcgi_script_nameでも可能です。
		include		fastcgi_params;
	}
}

Apacheと異なり、見境なしにindex.phpにQueryStringを渡すため、

http://example.com/Foo/Bar

のような、サフィックスが不要な、よりWikiに近い設定も可能です。

lighttpd

スタブ

Cherokee Web Server

  1. Virtual Serverをクリックし、PukiWiki Adv.を設置している仮想サーバーを選択してください。
  2. BehaviorタブからRule Managementをクリックし、Behavior画面に移ります。
  3. ウィンドウが開くので、Manualを選択し、Rule TypeをFile Exsistsにします。
  4. Match Any Filesのチェックを入れたら、Createボタンを押します。
  5. Ruleタブに移るので、画面下部のNOTボタンを押してください。
  6. 次にHandlerタブをクリックし、以下のようにルールを追加してください。
    cherokee_redirect.png
  7. 完了したらSaveをクリックしてCherokeeをリスタートしてください。(もっとも、Cherokeeは、Apache用の.htaccessが流用できますが)