做了比較久的偽靜態方面的探索,最後發現,用以下方法可以實現針對SEO的偽靜態,同時也有減少服務器壓力的效果.
>> 訪問PHP頁面
>> 根據內容更新時間生成Last-Modified,根據文件名與內容更新時間生成etag
>> 對客戶端的數據做對比,如查看客戶端浏覽器的Last-Modified,對比etag等,如果相等,輸出304,停止輸出最新數據
>> 如果不相等,照常輸出最新數據,並返回Last-Modified和etag給客戶端
/**
* 輸出head Last-Modified 並判斷是否輸出304
*/
protected function _echo_last_etag($tmp_time){
$now_url =get_absolute_url();
$md5 = md5($now_url.$tmp_time);
$etag = '"' . $md5 . '"';
header('Last-Modified: '.gmdate('D, d M Y H:i:s',$tmp_time ).' GMT');
header("ETag: $etag");
if((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $tmp_time) || (isset($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) && strtotime($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) < $tmp_time) || (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)){
header("HTTP/1.1 304 Not Modified");
exit(0);
}
}