laravel页面静态化 支持其他各种框架。
2017-12-14
由于公司业务需要,对官网进行了页面静态化。同时在此记录下方法。 服务器环境: centos 7.3 apache PHP7.1 框架:laravel5.3 基本要求: 1.apache rewrite 必须得开启的. 2. .htaccess 重写
代码语言:javascript复制 RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
若是单一入口文件,应该都是有这个配置的,尤其是第一句话:RewriteCond %{REQUEST_FILENAME} !-f 意思是,如果不存在和REQUEST_FILENAME 匹配的文件,才跳转至index.php
3.以laravel为例: 在public文件下创建zixun文件夹,并给777权限。 这种父级目录得人工创建, 因为给public目录 777权限的化过于可怕。
4.上代码:
代码语言:javascript复制//生成静态页方法
function create_static_page($path,$file_name,$content){
if(is_dir($path)){
$file_name = handle_file_name($path,$file_name);
file_put_contents($file_name, $content);
chmod($file_name,0777);
}
return $content;
}
//删除静态页方法
function delete_static_page($file){
if(is_file($file)){
unlink($file);
}
}
//清空目录下所有静态页方法
function delete_all_static_page($path){
$file_path=scandir($path);
foreach ($file_path as $value) {
if($value!='.' &&$value!='..')
{
delete_static_page(handle_file_name($path,$value));
}
}
}
//文件路径处理函数
function handle_file_name($path,$file_name){
if(substr($path, -1,1)=='/'){
return $path.$file_name;
}else{
return $path.'/'.$file_name;
}
}
5.方法举例:( laravel的看这里!)
laravel的视图在渲染输出时的函数
代码语言:javascript复制return view('zixun/article');
这里是直接把渲染好的视图输出了,我们截断它。
换成:
代码语言:javascript复制$string = view('zixun/article')__toString();
return create_static_page(public_path().'/zixun',$id.'.html',$string);
意思就是,将渲染好的内容,传给我的 静态页方法来处理。
如果你的文件权限、方法调用什么的都没问题,那在public/zixun 下面应该就生成了对应的html文件。
这样你访问对应的url时,就访问的是静态页的内容了。 例如: www.slidyy.com/zixun/111.html
6.静态页更新:
通过删除对应的静态页来实现,因为没有该静态页了,自然访问的就是对应的控制器了。
这里提供两个方法:
1. delete_static_page 删除特定的静态页 例如delete_static_page(public_path().'/zixun/111.html');
2. delete_all_static_page() 删除特定目录下的所有静态页 例如: delete_all_static_page(public_path().'/zixun/');