Mod_Rewrite もどき2
2006年3月30日
ベターな方法を見つけた。今度は、以前使っていた mod_rewrite とかなり互換性がある。
まず、.htaccess に以下のように記述。
さらに、以下の内容で 404.php を用意。
ただし、この方法が使える環境は、限られているようだ。ラクーカンでも、サーバの設定が変われば、使えなくなるかも(?)あと、GET は OK だが POST がまだできない。(追記:解決)
まず、.htaccess に以下のように記述。
<FilesMatch "^(item|catid|archive|archivelist)\-([0-9\-]+)\.html$"> ErrorDocument 404 /nucleus/404.php </FilesMatch>
さらに、以下の内容で 404.php を用意。
<?php
if (!isset($_SERVER['DOCUMENT_URI'])) {
header("HTTP/1.0 404 Not Found");
exit("404 Not Found");
}
$temp=preg_replace('/^[\S\s]*?\/([^\/]+)$/','$1',$_SERVER['DOCUMENT_URI']);
$_GET=array();
if (preg_match('/^archive\-([0-9]+)\-([0-9]+)\-([0-9]+)\.html$/',$temp,$matches)) {
$_GET['archive']=$matches[2].'-'.$matches[3];
$_GET['blogid']=$matches[1];
} else if (preg_match('/^item\-([0-9]+)\.html$/',$temp,$matches)) {
$_GET['itemid']=$matches[1];
} else if (preg_match('/^catid\-([0-9]+)\.html$/',$temp,$matches)) {
$_GET['catid']=$matches[1];
} else if (preg_match('/^archivelist\-([0-9]+)\.html$/',$temp,$matches)) {
$_GET['archivelist']=$matches[1];
}
unset($temp);
$_SERVER['PATH_INFO']=$_SERVER['REQUEST_URI']=$_SERVER['DOCUMENT_URI'];
unset($_SERVER['DOCUMENT_ARGS']);
unset($_SERVER['DOCUMENT_URI']);
unset($_SERVER['DOCUMENT_PATH_INFO']);
include('./index.php');
?>ただし、この方法が使える環境は、限られているようだ。ラクーカンでも、サーバの設定が変われば、使えなくなるかも(?)あと、GET は OK だが POST がまだできない。(追記:解決)