https部署折腾(五):修改function.php设置wordpress文章中链接的http为https

当站点部署为https后,原来的文章中很多地方还是引用的http的链接,怎么办呢?其实可以不用管的,但是觉得很不爽,强迫症嘛,理解一下。另外,如果链接是资源文件,比如js啊,iframe的src链接啊什么的,可能还会造成浏览器网址栏前面的绿色小锁消失,并提示“您与此网站建立的是私密链接,但网络上的某些用户也许能更改此网页的外观”,差不多就是这个提示了。这个听起来是比较严重,是因为页面上有些东西并没有通过https加密,所以从服务器到浏览器的过程中可能被篡改,这时浏览器就会认为不是绝对安全的,但是who care,小博客,没用户,没流量,谁吃饱了撑着会改呢?

下面还是说说怎么修改吧…可以通过修改主题中的function.php文件达到目的,找到function.php文件,在末尾的“?>”前加上如下代码(如果没有“?>”,那么下面的代码就加在最后),然后将我的网址juwends.com替换成自己的:

//=== 替换内容中http链接为https ===//
function my_content_manipulator($content){
 if( is_ssl() ){
 $content = str_replace('https://www.juwends.com', 'https://www.juwends.com', $content);
 $content = str_replace('https://www.juwends.com', 'https://www.juwends.com', $content);
 }
 return $content;
}
add_filter('the_content', 'my_content_manipulator');

加上这段代码后,就可以实现文章中的链接的http变成https了。

注意,这里只是修改了页面的展示,并没有修改数据库中的内容。

https部署折腾(四):修改wp-config.php设置wordpress的https访问

本文中所说的站点部署https是利用阿里云的CDN部署的https,我的理解是CDN上面的站点(缓存页面)是https访问,而部署在阿里云空间上的原始网站并不是https,还是http,这个http站点也就是CDN的回源站点。上述是我的理解,但是是否正确还需要再深入研究才能窥其真理。

因此,wordpress配置https就不能简单的在后台的设置里面将主页设置为https,因为这个站点其实是http的,如果配置成https,那么当访问https的时候,会先访问CDN,而CDN会回源,也就是会去找http的站点,这时回源站点又被设置为了https,那么又会被重定向到CDN,这样就出现了访问CDN的无限重定向,导致网页无法打开,或者某些文件无法加载的问题。

所以使用CDN部署的https必须将wordpress的后台主页设置为http。

然后设置https访问通过修改wp-config.php文件实现,找到这个文件,打开后在开头的“<?”下面添加如下代码即可(“//”后面的注释可以不用加,习惯加上注释,才知道是做什么的)

//=== 将用户界面与主页相关的http链接替换为https,后台不用更改主页地址 ===//
define('WP_HOME', 'https://'.$_SERVER['HTTP_HOST']);
define('WP_SITEURL', 'https://'.$_SERVER['HTTP_HOST']);
//=== 设置https为开启 ===//
$_SERVER['HTTPS'] = 'ON';

保存后就可以通过https访问了,到这里,就设置完毕了。那么,再总结下:

1,wordpress主页在后台依然设置为http
2,在wp-config.php中添加代码实现https访问

MySQL联表删除语法

之前写到联表更新,那么有没有联表删除呢?

答案也是有的,下面将是代码记录:

假设有2张表:
1,user表,字段为:id,user_name
2,user_role表,字段为:id,role_name,user_id
关联关系是 user.id = user_role.user_id

现要删除某一条user表的数据以及该user对应的user_role表中的数据,那么用下面的sql就可以实现这个目的了:

delete u, u_r from user u, user_role u_r 
where u.id = ? and u.id = u.user_id

上述sql中,u是user的别名,u_r是user_role的别名,from语句前面要附上别名,这个别名是用于指定删除哪张表数据的,如果只有u或者u_r,那么仅删除对应的那张表上的数据。

MySQL联表更新语法

之前写代码操作数据库,如果遇到需要同时更新两张表时,我会采用在同一个事务中使用2句sql语句分别进行更新。其实,这种需要发送2句sql语句的方法效率相对来说是比较低的,有没有只用1句sql语句就可以完成这个操作的呢?

答案是有的,下面将是代码记录:

假设有2张表:
1,user表,字段为:id,user_name
2,user_role表,字段为:id,role_name,user_id
关联关系是 user.id = user_role.user_id

现要更改某一条user表的数据的的user_name字段以及该user对应的user_role表中的数据的role_name字段,那么用下面的sql就可以实现这个目的了:

update user, user_role set 
	user.user_name = ?, user_role.role_name = ?  
where user.id = ? and user.id = user_role.user_id

Win10配置IIS网站后图标旁出现红色小叉无法访问网站的解决方法

Window上,在本地搭建html访问平台怎么最快,当然是Windows自带的IIS最快,控制面板->管理工具->IIS管理器,创建一个网站,然后简单的配置一下,再把html文件拷进去,浏览器就可以直接访问了,杠杠的。

可是就在不久前,我就这么玩儿,但是创建的网站的图标旁边有个小红叉,并且启动网站后也无法访问,于是网上查了下,网上千奇百怪的答案都有,有的人并不懂,但也要出来凑凑热闹,天朝的群众就是多,什么都要去凑凑,对需要解决问题的人来说完全就是干扰嘛,所以说并不是所有的答案都是正确的,只有一个个的试,最后发现原来是IIS主键配置不正确。下面将正确的配置方法记录下来:

1,控制面板->程序和功能->启用或关闭windows组件

2,按照下图找到对应的选项并勾上,然后点击确定

继续阅读

Filter和HttpServletRequest代理类实现Request参数值更改

前几日写代码,发现没有过滤搜索框输入的特殊字符,比如输入“_”会导致所有数据都被搜索出来(数据库为MySQL),这显然是不正确的,所以决定将搜索关键词中的“_”替换成”\_”,但是我突然想到个问题,这个搜索值获取是在每个Controller中获取的,我必须要找到所有的Controller中获取该参数的代码位置,然后进行修改,然而我并不想这么做…

我想到将request中该参数的值在被Controller获取前更改,然后就不用修改之前的代码就可以实现,但是后面我发现ServletRequest并没有提供修改参数值的方法… 后面经过思考,想到可以制造一个ServletRequest代理类,在代理类中将getParameter重写,即返回需要的值,再将代理类的实例传给Controller使用,这个方法最后验证是可行的。

下面将记录代码,这里使用到Filter,作为请求到达Controller前的拦截器,对request进行代理:

继续阅读