联系官方销售客服

1835022288

028-61286886

求助 版主:论坛审计组
伪静态的问题,每个分目录下都有一个A、B的子目录
类型:迅睿CMS 更新时间:2019-11-29 22:09:56

关于伪静态的问题,我有一个问题询问各位大佬。


是这样的我做的网站主目录是按照年代走的,比如2012、2013之类的,每个分目录下都有一个A、B的子目录,但是因为目录名字不能重复所以是A2012、A2013这样形式的。


URL规则组合起来就是【2012\A2012、2013\A2013】这样形式的不好看,就用自定义函数给去掉后面的2012和2013变为【2012\A、2013\A】。


但是在伪静态解析就出现问题了,比如我用正则表达式:

 ([\w]+)\/(A)

来取得出来的是:

$1=2012,$2=A

到这里取出都是没问题的,但是因为想指向到2012A这个目录,肯定是希望$2+$1得出A2012这样子的,就在后面写的是:

index.php?c=category&dir=$2$1

结果发现这里不会相加,这里会到

index.php?c=category&dir=A

这个地址,因为没有A这个栏目就提示栏目(A)不存在。。。


其实简单的就是想问如何将解析规则中的变量$1和$2之类的相加。。。


先感谢诸位大佬。

回帖
  • 迅睿粉丝
    #1楼    迅睿粉丝
    2019-11-28 19:13:57
    Chrome 0
    目录名字是什么样子的
  • 迅睿粉丝
    #2楼    迅睿粉丝
    2019-11-28 19:41:16
    Chrome 0
    Compas 目录名字是游戏名字,游戏是年代游戏,fifa19,比如我想 fifa19/news/index.html、fifa20/news/index.html 这样的,因为子目录news又不能重复。。。只能变成 fifa19/19news 之类的,这不就不美观了么,就有如上的问题了。
  • 迅睿粉丝
    #3楼    迅睿粉丝
    2019-11-28 19:49:12
    Chrome 0
    fifa19是目录的话对应的规则就是:
    "([\w]+)\/(.*)"  => 'index.php?c=category&dir=$1',

  • 迅睿粉丝
    #4楼    迅睿粉丝
    2019-11-28 19:58:18
    Chrome 0
    fifa19/19news是目录的话fifa19/news/index.html 对应的规则就是:
    "(.+)\/index.html(.*)"  => 'index.php?c=category&dir=$1',

  • 迅睿粉丝
    #5楼    迅睿粉丝
    2019-11-28 20:37:41
    Chrome 0
    二开/定制/使用解答专家感谢大佬回答,但是是不行的,你看我的设置。。。父目录是 fifa19 子目录是 19news,然后URL规则那里也没问题通过自定义函数把子目录的 19news改为了 news,但是这样解析规则 $1 取出的就是 news 而不是 19news。。。

    WX20191128-203446@2x.png

    WX20191128-203302@2x.png

  • 迅睿粉丝
    #6楼    迅睿粉丝
    2019-11-28 20:43:42
    Chrome 0
    天天向上感谢大佬回答,但是这样可以取出 fifa19 的目录进行访问,但是无法通过 fifa19/news 访问到 fifa19下的子目录 19news当中去。我原先的想法是这样的:
    "fifa([\w]+)\/(.*)\/index.html"  => 'index.php?c=category&dir=$1$2',
    通过这样 取出 $1=19 然后 $2=news,然后再在dir这里相加出来,结果不行只会出现$1的19导致不显示目录,哪怕我不取两个变量相加:
    "fifa([\w]+)\/news\/index.html"  => 'index.php?c=category&dir=$1news',
    结果也是一样的只会指向 index.php?c=category&dir=19 导致如下结果:
    WX20191128-204329@2x.png
  • 迅睿粉丝
    #7楼    迅睿粉丝
    2019-11-28 20:51:29
    iPhone手机 0
    原理很简单,应用看个人能力,正则表达式拆分匹配方式
  • 迅睿粉丝
    #8楼    迅睿粉丝
    2019-11-28 20:54:48
    Chrome 0
    fifa19/news/index.html 红色的才是真正的栏目目录吗?那只能曲线救国了
  • 迅睿粉丝
    #9楼    迅睿粉丝
    2019-11-28 21:04:19
    Chrome 0
    新建文件:/dayrui/Core/Controllers/Mycategory.php
    <?php namespace Phpcmf\Controllers;
    
    // 曲线救国线路
    class Mycategory extends \Phpcmf\Home\Module
    {
    
    	public function index() {
    
    		
    		$page = max(1, (int)\Phpcmf\Service::L('input')->get('page'));
    
    		$module = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-share');
    		if (!$module) {
    		    $this->_msg(0, dr_lang('共享栏目缓存不存在'));
                return;
            }
    		
    		$dir = '';
    		
    		$dir1 = dr_safe_replace(\Phpcmf\Service::L('input')->get('dir1'));
    		$dir2 = dr_safe_replace(\Phpcmf\Service::L('input')->get('dir2'));
    		if (preg_match('/([0-9]+)$/U', $dir1, $one)) {
    			// 找到数字,组合目录
    			$dir =  $one[1].$dir2;
    		} else {
    			$this->_msg(0, dr_lang('参数1没有数字'));
    		}
    		
    
    		$id = intval($module['category_dir'][$dir]);
    		$cat = $module['category'][$id];
    		if (!$cat) {
    			// 返回无法找到栏目
    			 exit($this->goto_404_page(dr_lang('栏目(%s)不存在', $dir)));
    		}
    
    		// 初始化模块
            if ($cat['tid'] == 1) {
    		    if ($cat['mid']) {
                    $this->_module_init($cat['mid']);
                } else {
                    exit($this->goto_404_page(dr_lang('栏目所属模块不存在')));
                }
            } else {
                $this->_module_init('share');
            }
    
    		
    		// 调用栏目方法
    		$this->_Category($id, $dir, $page);
    	}
    
    }
    "([a-z0-9]+)\/([a-z0-9]+)\/index.html(.*)"  => 'index.php?c=mycategory&dir1=$1&dir2=$2',

    满意答案
  • 迅睿粉丝
    #10楼    迅睿粉丝
    2019-11-29 22:09:56
    Chrome 0
    @黄老邪:非常感谢大佬,我才看到,等下去试试。╰(*°▽°*)╯