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