php+.htaccess实现多入口转为单入口处理

一般做小站或者企业网站我都习惯用多入口的结构,例如一个站点有多个入口:
http://www.qiyewangzhan.com/index.php
http://www.qiyewangzhan.com/product.php
http://www.qiyewangzhan.com/orders.php
这样做的好处就是开发简单快捷

但是有时我们需要对全部页面加一些东西,例如流量统计的js\引用某个文件去进行权限判定等等,这时多入口结构的网站只能一个一个文件进行修改,很费时间。

下面我利用rewrite功能结合php做路由,做了一个把网站转化为单入口的方法,具体功能是实现全局页面做一个缓冲,和所有页面插入js统计代码。这里我只提出了一个思路,具体更详细和不足的地方希望大家能补充完善一下。

@index.php代码


<?php //--------检测静态文件是否过期--------
$arrGet=$_GET;
unset($arrGet['target']);
$str='.';
foreach($arrGet as $var1 => $var2)
{
 $str.=$var1."=".$var2.".";
}
$str=substr($str, 0, -1) ;
if(file_exists("cache/".$_GET['target'].$str.".cache"))
{
    $time = time();
         
         //文件修改时间和现在时间相差半小时一下的话,直接导向cache文件,否则重新生成cache
    if($time - filemtime("cache/".$_GET['target'].$str.".cache") < 30*60)
    {
        include_once("cache/".$_GET['target'].$str.".cache");
 exit;
    }
}
//在你的开始处加入 ob_start(); 
ob_start(); 
?>
<? //--------在所有页面中添加统计脚本部分--------
$faaa=$_GET['target'].".php"; 
$jsbody="
<!-- Piwik -->
<script type=\"text/javascript\"> 
  var _paq = _paq || [];
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u=((\"https:\" == document.location.protocol) ? \"https\" : \"http\") + \"://192.168.2.114:8080/piwik//\";
    _paq.push(['setTrackerUrl', u+'piwik.php']);
    _paq.push(['setSiteId', 1]);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript';
    g.defer=true; g.async=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
  })();
</script>
<noscript><p><img src=\"http://192.168.2.114:8080/piwik/piwik.php?idsite=1\" style=\"border:0\" alt=\"\" /></p></noscript>
<!-- End Piwik Code -->
</body>";
echo str_replace('</body>',$jsbody,file_get_contents($faaa)); 
//include $_GET['target'].".php";
?>
<? //--------生成静态文件部分--------
//在结尾加入 ob_end_clean(),并把本页输出到一个变量中 
$temp = ob_get_contents(); 
ob_end_clean(); 


//写入文件 
$fp = fopen("cache/".$_GET['target'].$str.".cache",'w'); 
fwrite($fp,$temp) or die('写文件错误'); 


//重新导向
include_once("cache/".$_GET['target'].$str.".cache");
?>


.htaccess

RewriteEngine on  
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([a-zA-Z0-9\_]+)\.php(.*)$ @index.php?target=$1&%1

你可能感兴趣的:(多页面,单入口处理)