ThinkCMF部署在阿里云虚拟主机的一些坑回顾

ThinkCMF部署在阿里云虚拟主机的一些坑回顾

By 光哥 — Posted in 本站 on 2019-09-14

  ThinkCMF(以下简称cmf)是居于TP5开发的一款php框架,简单易用,二开灵活,本人甚是喜爱。于是就有了这个博客。

  在本地开发测试时,由于对“服务器”拥有绝对的控制权,从下载cmf到部署到本地MAMP,再到前端模板开发,最后到插件功能开发,一路顺风。等一切都准备完毕,把线上旧的博客程序撤下替换为新的cmf时,意外发生了——404错误。cmf的根路径是二级目录public,而虚拟主机的根目录是固定的htdocs,也就是网站的一级根目录。一级根目录里连入口文件都没有,不报错才怪!

  于是在百度、cmf官方社区、tp官方社区里找了无数种解决方法,一一尝试都以失败告终。在多个qq群里救助也没有解决问题,好强烈的挫败感...

  无奈之下,只能去阿里云提交工单寻求帮助。几经周折,客服帮我写了个.htaccess进行伪静态URL重写。这种方法我也尝试过,网上的人说得好轻松,可是我试了,在本地可以,在虚拟主机上仍是报错。不管怎么样,看到首页能打开了,心里很是感谢阿里云客服。.htaccess代码如下:

note_attach.jpeg

  仔细操作一下,糟糕,他们只是帮我解决了首页能打开,其它页面全部404!已经搞了一天了,还没彻底搞好,真是糟糕的一天!

  没办法,只能从最基础的东西开始学习URL重写的语法,我坚信,困难最终必将解决,一定有办法完美解决这个问题,只是暂时没有找到而已。

  经过学习之后,了解了它的语法和含义,经过多次修改和尝试,.htaccess终于基本解决了问题。代码如下:

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/public
RewriteRule ^(.*)$ /public$1 [L,QSA]

  问题只是基本解决,但仍有些小问题,比如程序输出的url链接地址都包含了/public/这层目录,如:http://www.1spot.top/public/article/4.html、首页一打开就是http://www.1spot.top/public/  。虽然能正常运行,但是总是感觉好不舒服。于是,我有改进了.htaccess代码,而且在程序中写了个函数,在模板输出url时直接去掉“public/”,问题终于完美解决了。

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ /public/$1 [L,QSA]
//在公共函数库中添加下面的函数。  /vendor/thimkcmf/cmf/src/common.php
/**
自定义
 +----------------------------------------------------------
 * 去除URL中的public目录
 +----------------------------------------------------------
 * @param string $urlstr url字符串
 +----------------------------------------------------------
 * @return string
 +----------------------------------------------------------
 */
 function reurl($urlstr){
    $new_urlstr=$urlstr;
    if($urlstr){
        $new_urlstr=str_replace("public/","",$urlstr);
    }
    return $new_urlstr;
 }
    $menu.name|reurl|default=''
    reurl(cmf_url('portal/Article/index',array('id'=>$vo.id,'cid'=>$vo.category_id)))

  接下来,还有另外一个问题,邮件发送不了!问题总是解决不完的,慢慢来吧!


参考网站:

https://www.cnblogs.com/xiaozong/p/5782291.html

https://www.landui.com/help/show-7058