Linux

Mod_Rewrite もどき2

2006年3月30日

 ベターな方法を見つけた。今度は、以前使っていた mod_rewrite とかなり互換性がある。

まず、.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 がまだできない。(追記:解決

コメント

コメントはありません

コメント送信