关于FineCMS伪静态的一些问题

做企业站FineCMS是款不错的CMS,今天在做一个客户站的时候发现一个问题比较烦人,客户在分享文章到朋友圈的时候,发现不管分享什么页打开都自动跳转到首页,百思不得其解,百度了下,微信分享url的时候会在结尾加上

http://www.ityang.com/?from=timeline&isappinstalled=0 

这种url的后缀。仔细想下,这个站启用了伪静态,测试了下,果然只要url里面有?任何页都跳转到首页,这不科学啊,找问题吧。
以下是三种方案(我代码很垃圾,不知道优缺点就都写出来)
1、抛开官方的方式,直接定义.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/$ index.php?c=content&a=list&catdir=$1 [L] 
RewriteRule ^([a-zA-Z0-9]+)-([0-9]+)/$ index.php?c=content&a=list&catdir=$1&page=$2 [L] 
RewriteRule ^([a-zA-Z0-9]+)/([0-9]+).html$ index.php?c=content&a=show&catdir=$1&id=$2 [L] 
RewriteRule ^([a-zA-Z0-9]+)/([0-9]+)-([0-9]+).html$ index.php?c=content&a=show&catdir=$1&id=$2&page=$3 [L]

这个我测试了基本都没问题,就算有问题,暂时还没找到,哈哈,不过需要删除官方.htaccess原来的

RewriteRule !\.(js|ico|gif|jpg|png|css|swf)$ index.php [L]

这句,如果不删除,后台url路径找不到。

2、群里一位朋友的方法
(1)找到\dayrui\core\Router.php,大概在113行插入以下代码

  //----修改
        $access = true;
        $special = array("s=","captcha","attachment",'=api');
        foreach($special as $v){
            if(stristr($_SERVER['REQUEST_URI'],$v)){
                $access = false;
                break;
            }
        }
        if(stristr($_SERVER['REQUEST_URI'],"?") && $access){
            unset($_SERVER['QUERY_STRING']);
        }
        //----修改

如图

(2)找到\config\router.ini.php,修改伪静态规则

    '^([a-zA-Z0-9]+)\.html.*'          => 'c=content&a=list&catdir=${1}',
    '^([a-zA-Z0-9]+)\-page([0-9]+)\.html' => 'c=content&a=list&catdir=${1}&page=${2}',
    '^([a-zA-Z0-9]+)\-([0-9]+)\.html'           => 'c=content&a=show&id=${2}',
    '^([a-zA-Z0-9]+)\-([0-9]+)\-([0-9]+)\.html' => 'c=content&a=show&id=${2}&page=${3}',

这种伪静态规则没问题,url带上带问号的参数也能访问。但是如果用我的伪静态方式列表页就不可以,代码如下

    '^([a-zA-Z0-9]+)/$'          => 'c=content&a=list&catdir=${1}',
    '^([a-zA-Z0-9]+)/([0-9]+)/$' => 'c=content&a=list&catdir=${1}&page=${2}',
    '^([a-zA-Z0-9]+)/([0-9]+).html'           => 'c=content&a=show&id=${2}',
    '^([a-zA-Z0-9]+)/([0-9]+)\-([0-9]+).html' => 'c=content&a=show&id=${2}&page=${3}',

因为用目录的形式,列表页如果用*通配符的话和内容页规则冲突,在列表页点任何url都是自己。NND,以后想办法解决。

3、论坛一个兄弟的代码
(1)在router.ini.php文件,伪静态链接后面加入(.*) 如图所示,(伪静态规则,请根据设置的规则自行修改)
图
(2)修改dayrui\core\Router.php 文件 在约第112行

       //$path_url_string = isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'] : (strlen($_SERVER['REQUEST_URI']) == 1 || $_SERVER['REQUEST_URI'] == '/' . ENTRY_SCRIPT_NAME ? '' : $_SERVER['REQUEST_URI']);
        $path_url_string = $_SERVER['REQUEST_URI'];
        if(strpos($path_url_string,'index.php')){
            $path_url_string = $_SERVER['QUERY_STRING'];
        }elseif(strpos($path_url_string,'?')) {
            $path_url_string = strstr($path_url_string,'?',TRUE);
        }
        $new_url_string  = '';
        $flag = !isset($_SERVER['QUERY_STRING']) || empty($_SERVER['QUERY_STRING']);
        $flag = $flag || strpos($_SERVER['REQUEST_URL'],'index.php')==false;
        if ($flag) {
            $router_config_file = CONFIG_DIR . 'router.ini.php';
            if (is_file($router_config_file)) {

这里写图片描述
这个规则带?就访问自己对了,但是后台的路径就有问题。

三方法都列出来,有大神改进的话最好,我暂时用自己的第一种。

猜你喜欢

转载自blog.csdn.net/likeni1314/article/details/57083907
今日推荐