PHP中$_SERVER中的SERVER_NAME和HTTP_HOST的区别

最近在开发站群软件,用到了根据访问域名判断子站点的相关问题。PHP获取当前域名有两个变量 HTTP_HOST 和 SERVER_NAME,我想知道两者的区别以及哪个更加可靠。

首先我想说,百度上那些转来转去的文章都是扯淡!
有说相同的,有说不同的,都没说明原因,没经过验证就互相转来转去的,浪费观众时间。

下面说说本人经过亲自验证 + 查阅官方文档 + 官方BUG列表 + 官方邮件列表 + sitepoint + webmasterworld + google的总结:

相同点:
当满足以下三个条件时,两者会输出相同信息。
1. 服务器为80端口
2. apache的conf中ServerName设置正确
3. HTTP/1.1协议规范

不同点:
1. 通常情况:
_SERVER["HTTP_HOST"] 在HTTP/1.1协议规范下,会根据客户端的HTTP请求输出信息。
_SERVER["SERVER_NAME"] 默认情况下直接输出apache的配置文件httpd.conf中的ServerName值。

2. 当服务器为非80端口时:
_SERVER["HTTP_HOST"] 会输出端口号,例如:mobibrw.com:8080
_SERVER["SERVER_NAME"] 会直接输出ServerName值
因此在这种情况下,可以理解为:HTTP_HOST = SERVER_NAME : SERVER_PORT

3. 当配置文件httpd.conf中的ServerName与HTTP/1.0请求的域名不一致时:
httpd.conf配置如下:

客户端访问域名www.mobibrw.com
_SERVER["HTTP_HOST"] 输出 www.mobibrw.com
_SERVER["SERVER_NAME"] 输出 mobibrw.com

所以,在实际程序中,应尽量使用_SERVER["HTTP_HOST"] ,比较保险和可靠。

参考链接:
php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别

Ubuntu 12.04 Apache2重启提示could not reliably determine the server's fully…问题解决

Ubuntu 环境,当apache2重启提示:

解决的问题是:

打开default文件后,在default文件顶端(第一行)加入:

重启Apache2就不会提示上述错误了。

参考链接
Ubuntu Apache2重启提示could not reliably determine the server’e fully…问题解决

PHP 如何获取当前的域名

原文链接


PHP 如何获取当前的域名

解决WordPress开启HTTPS后图片不能正常加载的问题

Apache2开启了Https支持,但是在Https打开网页的时候,发现,图片都不能正常的显示出来,看了一下源代码,发现是网页中的图片链接都被写成了HTTP的,导致浏览器出于安全的原因,不再加载图片,导致效果很差,因此需要WordPress同时支持HTTP,HTTPS。

找到当前主题下的 function.php 文件,编辑之,在里边代码的末尾追加如下代码:

参考链接:WordPress 开启全站 HTTPS

Ubuntu 12.04启用WordPress缓存插件WP Super Cache

WP Super Cache的基本介绍


WPSuperCache

WP Super Cache 是 WordPress 官方开发人员 Donncha 开发,是当前最高效也是最灵活的 WordPress 静态缓存插件。它把整个网页直接生成 HTML 文件,这样 Apache 就不用解析 PHP 脚本,通过使用这个插件,能使得你的 WordPress 博客将显著的提速。

WP Super Cache的缓存机制


WP Super Cache 缓存机制有三种,mod_rewrite 缓存模式 , PHP 缓存模式,传统缓存模式。

WP Cache 缓存时,会在你的“wordpress 安装文件夹/wp-content/cache/”文件夹下生成一系列wp-cache-xxxxxx.html格式的文件;Super Cache 缓存时,则在你的“wordpress 安装文件夹/wp-content/cache/supercache/”文件夹下生成对应每一篇文章或者标签等的目录。名称为xxx.html,取决于你的文章ID是怎么设置。目录下面就是静态的 index.html 文件。

当你一个访问者来的你的站点,他没有登入或者也没有留言,这样他得到是一个在 WordPress cache 文件夹下的 supercache 子文件夹下的纯静态文件,其实你都可以自己到上面的 supercache 目录下去查看同样的永久链接的 HTML 文件的备份。

判断一个页面是否已经被缓存了,查看该页面的源代码,如果访问者已经登陆或者留了言,就会返回 WP Cache 函数生成的页面,并且最后一行会有“Cached page generated by WP-Super-Cache+缓存时间”这行字,就像下面这行代码一样:

而 Super Cache 缓存会多一行如下代码:

因为 Super Cache 是真正静态的,对搜索引擎和博客的速度非常有好处,而且有效的减轻了 php 和 Mysql 的查询压力。这点对于大型博客来说优势很明显,一般的较小的博客感觉就不怎么明显。

WP-Super-Cache的使用设置


1.在插件页面中查找"WP Super Cache",然后安装即可。

2.在"设置"->"固定链接"中增加固定链接设置,建议如下设置:PermalinksSetting

注意:不要设置成"?/p=%post_id%",这样设置之后会导致无法在首页中打开分类目录,导致所有的分类都被重定向到了首页。

3.在插件页面中启用"WP Super Cache"。

4.页面中原有的链接,如果原来没有设置过"固定链接"的话,类似如下"http://www.mobibrw.com/?p=2969"的样子(比如站内的相互引用链接),不需要进行任何修改,只是这样访问不会缓存而已。

5.开启Apache2的mod_rewrite模块

重启Apache2

修改Apache2配置文件:

修改其中的:
AllowOverride NoneAllowOverride All

参考下面的修改:

如果同时启用了Apache2的Https功能,则需要同时修改相同目录下面的default-ssl文件。

参考链接


WordPress缓存插件:WP Super Cache