◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
作为一款轻型博客建站程序,z-blog算是做比较优秀的网站建站程序,做网站seo这一块不能少,而伪静态就是其中的一项,今天就来说说z-blog php伪静态规则的配置方案与相关问题,希望对你有用。
以目前的z-blog php为例子,它自带了一个伪静态插件,叫做静态管理中心 1.6,在做伪静态的时候,它直到至关重要的作用。
打开它,可以看到默认为动态,如果要实现伪静态功能,勾选中间的伪静态即可,如下图:
如果不想修改,直接滚动到页面最下边,点击“提交”,但是对我这个有点弱的人来说,每个文章的链接地址都要符合自己的意思才肯放过,因此重新修改url的生成规则是必不可少的,但是面对这么多规则,它们都代表什么,自己必须先弄懂。
规则说明
{%host%}:表示网站域名,后面自带“/”所以在与其他规则搭配时,一般不加“/”。
{%id%}:表示文章或分类ID;
{%page%}:表示分页条数字ID;
{%year%}:表示年份;
{%month%}:表示月份;
{%date%}:代表日期,一般不会用它;
{%alias%}:代表别名,在文章处代表文章标题,在分类处又代表分类别名,其他也是一样;
{%category%}:表示分类名,如果不设置英文别名,它就会调用中文分类名,建议设置英文别名
说明:除{%host%}外,其他的参数都需要加上“/”。一些外围名称,如post、page、category、tags、date、author、可以设置成任意名称,但像{%date%}这样的参数就不能修改。
我一般其他的都不管,只需要修改文章url、首页url、分类url和标签的url。用换规则如下
文章url与展现样式:http://localhost/prose/1.html
{%host%}{%category%}/{%id%}.html
首页url与展现样式:http://localhost/index.html
{%host%}index.html
分类url与展现样式:http://localhost/prose/list_2.html
{%host%}{%alias%}/list_{%page%}.htm
标签的url与展现样式:http://localhost/tags/散文.html
{%host%}tags/{%alias%}.html
把伪静态的规则添加到插件中
虽然以上的规则可以通过手动添加到伪静态下面的表单中,但是每次在动态与静态当中切换后,就会重置成默认规则,要添加又要重复手动添加,相当麻烦,此时只需要把这些规则一次性的添加到插件的php文件,打开后就可以在表单框中看到自定义的规则。
首先通过路径\zb_users\plugin\STACentre\,并用记事本打开main.php文件,用查找:
{%host%}post/{%id%}.html
这个规则,找到大约53行的:
'ZC_ARTICLE_REGEX' => array
到第95行的:),
即97行的:
'ZC_DATE_REGEX' => array(
上面,选择它,该代码如下
'ZC_ARTICLE_REGEX' => array( '{%host%}?id={%id%}', '{%host%}index.php/post/{%id%}.html', '{%host%}post/{%id%}.html', '{%host%}post/{%alias%}.html', '{%host%}{%year%}/{%month%}/{%id%}/', '{%host%}{%category%}/{%alias%}/', ), 'ZC_PAGE_REGEX' => array( '{%host%}?id={%id%}', '{%host%}index.php/{%id%}.html', '{%host%}{%id%}.html', '{%host%}{%alias%}.html', '{%host%}{%alias%}/', //'{%host%}{%alias%}', ), 'ZC_INDEX_REGEX' => array( '{%host%}?page={%page%}', '{%host%}index.php/page_{%page%}.html', '{%host%}page_{%page%}.html', '{%host%}page_{%page%}/', //'{%host%}page_{%page%}', '{%host%}page/{%page%}/', ), 'ZC_CATEGORY_REGEX' => array( '{%host%}?cate={%id%}&page={%page%}', '{%host%}index.php/category-{%id%}_{%page%}.html', '{%host%}category-{%id%}_{%page%}.html', '{%host%}category-{%alias%}_{%page%}.html', '{%host%}category/{%alias%}/{%page%}/', '{%host%}category/{%id%}/{%page%}/', ), 'ZC_TAGS_REGEX' => array( '{%host%}?tags={%id%}&page={%page%}', '{%host%}index.php/tags-{%id%}_{%page%}.html', '{%host%}tags-{%id%}_{%page%}.html', '{%host%}tags-{%alias%}_{%page%}.html', '{%host%}tags/{%alias%}/{%page%}/', ),
复制下面我已经修改好的代码覆盖掉,代码如下:
'ZC_ARTICLE_REGEX' => array( '{%host%}?id={%id%}', '{%host%}index.php/post/{%id%}.html', '{%host%}post/{%id%}.html', '{%host%}post/{%alias%}.html', '{%host%}{%year%}/{%month%}/{%id%}/', '{%host%}{%category%}/{%alias%}/', '{%host%}{%category%}/{%id%}.html',//自定义文章URL规则 ), 'ZC_PAGE_REGEX' => array( '{%host%}?id={%id%}', '{%host%}index.php/{%id%}.html', '{%host%}{%id%}.html', '{%host%}{%alias%}.html', '{%host%}{%alias%}/', //'{%host%}{%alias%}', ), 'ZC_INDEX_REGEX' => array( '{%host%}?page={%page%}', '{%host%}index.php/page_{%page%}.html', '{%host%}page_{%page%}.html', '{%host%}page_{%page%}/', //'{%host%}page_{%page%}', '{%host%}page/{%page%}/', '{%host%}index.html',//自定义首页规则 ), 'ZC_CATEGORY_REGEX' => array( '{%host%}?cate={%id%}&page={%page%}', '{%host%}index.php/category-{%id%}_{%page%}.html', '{%host%}category-{%id%}_{%page%}.html', '{%host%}category-{%alias%}_{%page%}.html', '{%host%}category/{%alias%}/{%page%}/', '{%host%}category/{%id%}/{%page%}/', '{%host%}{%alias%}/list_{%page%}.html',//自定义分类规则 ), 'ZC_TAGS_REGEX' => array( '{%host%}?tags={%id%}&page={%page%}', '{%host%}index.php/tags-{%id%}_{%page%}.html', '{%host%}tags-{%id%}_{%page%}.html', '{%host%}tags-{%alias%}_{%page%}.html', '{%host%}tags/{%alias%}/{%page%}/', '{%host%}tags/{%alias%}.html',//自定义标签规则 ),
覆盖好man.php文件后保存,刷新下后台,此时你会发现在每个我们需要修改的规则最后,就有自己添加的单选框,当插件重置为默认值时,我们只需要重新勾选这些单选框后插件就算添加到表单中,最后点击提交,并点击弹出来的ReWrite规则框下的“创建.htaccess”,就可以实现伪静态,非常省事。
当然到这一步事情还没完,因为通过这样的操作后,主页和分类都会出问题,我们还需要进行下一步的修改。
导航栏模块的修改
在后台找到“模块管理”,在右边找到“导航栏”,打开它,在链接下面就有我设置的4个导航,链接如下:
http://localhost/ http://localhost/?cate=1 http://localhost/?cate=2 http://localhost/?cate=3
这里需要做好笔记,等到需要改为动态的时候还需要设置回来。
这4个分类栏目链接分别对应首页、散文一、散文二、散文三。对应的别名除了首页外分别为prose1、prose2、prose3,分别把它们修改成如下样式:
http://localhost/index.html http://localhost/prose1/list.html http://localhost/prose2/list.html http://localhost/prose3/list.html
当然这些都只是例子,需要把它们修改成你网站的真实栏目别名。当然到这里也还没有完成,因为首页还有问题。
接下来我们需要对网站根目录的index.php文件进行修改。
修改首页index.php文件
用记事本打开网站根目录的index.php文件,原始代码如下:
require 'zb_system/function/c_system_base.php'; $zbp->RedirectInstall(); $zbp->Load(); HookFilterPlugin('Filter_Plugin_Index_Begin'); ViewIndex(); HookFilterPlugin('Filter_Plugin_Index_End');
全选它,复制下面的代码:
require 'zb_system/function/c_system_base.php'; $zbp->RedirectInstall(); $zbp->Load(); // 确认伪静态状态 $is_pseudo_static = false; if (isset($zbp->option['ZC_STATIC_MODE']) && $zbp->option['ZC_STATIC_MODE'] === 'REWRITE') { $is_pseudo_static = true; } // 定义不需要重定向的查询参数,比如默认分类面中http://localhost/?cate=1带有“cate”这个参数,所以下面就列出来,其他也是一样修改即可。 $excluded_query_params = ['cate', 'tag', 'author']; // 检查是否为根路径请求,并且启用了伪静态 if ($is_pseudo_static) { // 获取当前请求的完整URL路径部分和查询字符串 $request_uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); $query_string = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : ''; // 去除可能存在的尾部斜杠,确保一致性 $request_uri = trim($request_uri, '/'); // 只有当请求的是根路径并且没有排除的查询参数时才进行重定向 if ($request_uri === '' || $request_uri === '/') { // 解析查询字符串为数组 parse_str($query_string, $query_array); // 检查是否有任何排除的查询参数 $should_redirect = true; foreach ($excluded_query_params as $param) { if (isset($query_array[$param])) { // 如果存在任何一个排除的查询参数,则不重定向 $should_redirect = false; break; } } // 如果没有匹配到任何排除的查询参数,则进行重定向 if ($should_redirect) { header('Location: /index.html'); exit; } } } // 继续执行原有代码 HookFilterPlugin('Filter_Plugin_Index_Begin'); ViewIndex(); HookFilterPlugin('Filter_Plugin_Index_End');
覆盖并保存。刷新下页面就可以实现我们需要的效果。
为什么要修改index.php文件,是因为通过对网站根目录下的.htaccess进行规则修改、又或者检查apache服务器中的httpd.conf配置文件中的:
LoadModule rewrite_module modules/mod_rewrite.so
前面的“#”号是否去掉,并修改首页的文件顺序为:
DirectoryIndex index.html index.php
又或者把导航模块中的首页设置成:
http://localhost/index.html
都无效时,只能通过修改index.php文件去实现跳转,达到良好的伪静态效果。相关说明都已经在代码的注释中,可以自行查看。