浏览模式: 标准 | 列表 技术归总

Apache下htaccess重定向代码

参考网址:https://coolestguidesontheplanet.com/redirecting-a-web-folder-directory-to-another-in-htaccess/

解决MOTOCMS系统更换主机后无法访问的问题(空白页或500 error)

MOTOCMS是一套美国公司开发的商业版CMS(内容管理)系统(它采用Zend加密源代码保护版权),它跟国内的米拓(mituo.cn)开发的CMS系统类似。这2套系统都可以创建多语言的页面(比如中文版/英文版),不同之处在于一个适合老外用,一个适合国人用。

最近需要将一个放在美国VPS上运行MOTOCMS系统的网站搬迁到国内虚拟主机上,文件转移以及数据库备份还原都是简单的操作,最坑爹的是搬迁完无法打开,页面提示:Zend Guard Run-time support missing! 这说明没有安装好Zend Guard,需要切换一个PHP版本环境试试看。

查看了原来VPS配置运行环境:PHP 5.5.38 + Zend Engine v2.5.0 + mysql 5.5.56

而新的虚拟主机环境是:PHP 5.5.30 + 无Zend Engine + mysql 5.7.23

在虚拟机管理后台看了一下可切换的PHP版本如下:

  • PHP5.2
  • PHP5.3
  • PHP5.4
  • PHP5.5
  • PHP5.6
  • PHP7.0
  • PHP7.1
  • PHP7.2

直接尝试切换到了最高版PHP7.2,结果错误变成了500 error或者空白页,这说明Zend Engine已经有了只不过有问题,然后查看了phpinfo信息(页面显示为Zend Engine v3.2.0),那怎么还会无法访问?

一般出现问题要去日志里找答案,翻了一下这个网站,找到了日志文件位于:

  • /mt-content/temp/logs/moto.log
  • /mt-content/temp/logs/php_errors.log

这2个日志文件详细记录了网站安装至今的所有错误日志信息,分别摘取这2个文件中的最新记录各1条如下:

  • 2019-09-08T07:51:48+08:00 WARN (4): require_once(/data/home/vhost007/htdocs/mt-includes/library/Moto/Authentication/AuthenticationService.7.2.php): failed to open stream: No such file or directory {"errno":2,"file":"/data/home/vhost007/htdocs/mt-includes/library/Moto/Authentication/AuthenticationService.php","line":1}
  • [08-Sep-2019 07:51:48 Asia/Shanghai] PHP Fatal error:  require_once(): Failed opening required '/data/home/vhost007/htdocs/mt-includes/library/Moto/Authentication/AuthenticationService.7.2.php' (include_path='/data/home/vhost007/htdocs/mt-includes/library:.:/var/www/php72/lib/php') in /data/home/vhost007/htdocs/mt-includes/library/Moto/Authentication/AuthenticationService.php on line 1

从错误信息中可以看出,程序找不到AuthenticationService.7.2.php这个文件,这看起来是程序判断当前php版本为7.2然后引用了这个文件,可是根本没有这个文件。

进入/mt-includes/library/Moto/Authentication/目录看一下到底有哪些文件,以AuthenticationService开头的如下:

  • AuthenticationService.5.3.php
  • AuthenticationService.5.4.php
  • AuthenticationService.5.5.php
  • AuthenticationService.5.6.php

果然是没有AuthenticationService.7.2.php那个文件,自然也就运行出错了(只不过前台没有报具体的错误需要自己看日志文件)。

既然知道答案了,直接在虚拟主机管理页面将php版本改为5.6试试看吧!

结果答案是:Zend Guard Run-time support missing!

继续改为5.3试试,页面显示空白页或500 error。

死马当活马医,选择唯一可选的5.4,网站正常了……

最终跑动这套MOTOCMS系统的配置是:

PHP 5.4.45 + Zend Engine v2.4.0 (with Zend Guard Loader v3.3) + mysql 5.7.23

修改Mysql表名

假定数据库名为is36,其中有个一个user表,要将其变为users,则:

先进入该数据库

use is36;

再执行修改

ALTER TABLE `user` RENAME `users`;

下载最新微软官方Microsoft Remote Desktop for Mac

在Mac下工作是比较高效的,但是有时候还是需要用到windows系统上的数据或者软件,除了使用第三方开发商的远程桌面工具外,微软公司也提供了Mac版(iMac和MacBook)的远程桌面软件(Microsoft Remote Desktop),可是中国区的Apple store无法直接下载到这个软件,通过搜索引擎中找到的第三方网站下载又怕有问题,那么怎么办呢?

直接找到微软官方下载地址:

https://docs.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/remote-desktop-mac

直接下拉到“the Mac beta client”地方选择下载测试版,下载完成后就可以直接使用了,我下载到的是05 SEP 2019, 06:21发布的10.3.2 (1650)  版本。

 

 

Windows版Digital Photo Professional 4.8.3...

 digital photo professional是佳能单反的配套软件,不过光盘早就扔了,只能去官方网站下载了。截止18年10月20日最新的版本为4.8.30。

页面地址:http://support-cn.canon-asia.com/contents/CN/ZH/0200550505.html

下载的话需要输入序列号,序列号就在相机底部的一排数字。

我拿到的下载地址是:http://gdlp01.c-wss.com/gds/5/0200005505/01/dppw4.8.30-installer.zip

 

Tags: digital photo professional

自用树莓派作为全屏网页展示机的配置

这篇日志被加密了,请输入密码后查看。

Apache服务器利用.htaccess隐藏网页文件扩展名

在网站根目录建立或上传.htaccess文件,内容如下:

  1. <IfModule mod_rewrite.c> 
  2. Options +FollowSymlinks 
  3. RewriteEngine On 
  4. RewriteBase / 
  5. RewriteCond %{REQUEST_FILENAME} !-f 
  6. RewriteCond %{REQUEST_FILENAME} !-d 
  7. RewriteCond %{REQUEST_FILENAME}.php -f 
  8. RewriteRule ^(.+)$ /$1.php [L,QSA] 
  9. </IfModule> 

解决80端口被封LNMP无法安装Let's Encrypt SSL证书

手头有一个国内的固定IP,80端口被封,内网中配置了一台运行lnmp的linux网站服务器,通过路由器端口映射功能,可以访问到443端口(https模式)。

lnmp自带的脚本中就可以增加Let's Encrypt SSL证书,但是该证书需要外网访问到域名才可以签发,但实际上80端口被封杀,压根无法访问到域名。通过google搜索发现也可以通过DNS验证模式来给需要上SSL的域名签名,但是毕竟繁琐。

时刻片刻,我想到了一个很有意思的方法——既然只是80端口被封,那么其它端口是可以正常访问到内网的网站服务器的(路由器上做端口映射)。

准备如下(以下数据都按实际修改):

1、国内的固定IP为1.1.1.1

2、国外买一台便宜的Linux服务器,安装好lnmp,获得固定IP为2.2.2.2

3、需要上SSL的域名为is36.com的子域名ssl.is36.com,is36.com域名放在dnspod.cn解析的,增加3个解析记录如下:

  • ssl.is36.com的A记录默认解析到1.1.1.1
  • ssl.is36.com的A记录国外线路解析到2.2.2.2
  • sslfd.is36.com的A记录默认解析到1.1.1.1

4、在国内的路由器上设置443端口映射到内网服务器443端口,888端口映射到内网服务器80端口.

5、在国内的服务器上新增sslfd.is36.com网站,指定网站目录为ssl.is36.com目录。

6、在国外的服务器上/usr/local/nginx/conf/vhost目录下新增一个sslfd.is36.com.conf文件,内容如下:

  • server
  • {
  •     listen          80;
  •     server_name     ssl.is36.com;
  •     location / {
  •         proxy_pass          http://sslfd.is36.com:888/;
  •         proxy_redirect      off;
  •         proxy_set_header    X-Real-IP       $remote_addr;
  •         proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
  •         }
  • }

7、保存好以上配置信息后,执行service nginx reload使生效。

8、回到国内服务器上,执行新增网站ssl.is36.com,指定ssl.is36.com目录,指定增加Let's Encrypt证书,最后就会部署成功。

9、尝试访问https://ssl.is36.com,成功!

总结:本文的解决思路就是通过dnspod国内外分区域访问的方法,让Let's Encrypt的验证服务器(国外线路)访问到我们的国外服务器,国外服务器接收验证请求后利用nginx反向代理获取http://sslfd.is36.com:888/的数据,而http://sslfd.is36.com:888/网站的数据跟ssl.is36.com的网站数据是同一个目录的,自然就会让验证服务器觉得验证成功了!