分类 "工具软件" 下的文章

新版本的goagent引入了pagespeed加速选项,正确开启此选项后能极大提高GAE代理的下行速度。注:这里所说的pagespeed跟google的CDN服务pagespeed不是一回事儿,前者是goagent内置用来加速GAE访问速度的可选项,而后者可以用来加速网站或PaaS服务端。更多技术细节在此不再展开了,有兴趣的同学可自行google搜索相关资料。

开启的具体方法,以目前最新版3.1.22为例,具体的proxy.user.ini设置参考如下:

[gae]
appid = piaoyuncc1|piaoyuncc2
#如果观看1080P以上视频,至少要2个以上服务端做负载平衡,否则会因瞬时请求过多而卡顿。
password = password
#添入你的GAE服务端密码。
window = 1
#因为使用自定义hk段,所以这里设置为最小值。
obfuscate = 1
#混淆必须开启,否则无法开启pagespeed。
pagespeed = 1
#pagespeed开启。

 

[iplist]
google_cn = www.google.cn|www.g.cn
#这里要用默认设置,因加速要使用此地址。
google_hk = ip1|ip2|ip3|ip4
#添入你自己查找到的本地区合适的google可用ip。

本地测试环境为10M带宽,可满带宽以1440p播放youtube的4k测试视频,较开启前速度提高近一倍,效果极其显著。
ps01

ps02

最后,此加速方式也是有缺陷的,那就是开启pagespeed选项后,上传数据只能小于16K。想要通过GAE代理上传大点的图片和压缩包时,只能关闭此选项。

延伸阅读:
goagent新功能个人配置文件proxy.user.ini使用简介
goagent配置文件proxy.ini各项参数介绍
GoAgent常见的使用问题汇总解答

在虚拟机中安装了Ubuntu,很多命令键与VMware的快捷键冲突,好比这个图形界面的切换

就很让人郁闷,在网上查了图形到命令行终端是Crtl+Alt+F1/F2/F3/F4/F5 竟全不管用了

还好在一篇文章中找到了答案,在此写下,方便以后查阅:
ctrl + shift + alt + F1 是切到终端模式
Alt+F7 切到图形界面
--------------------------------------------------------------------------------------------------------------------------
PS:就这么个小小的问题,花了不少时间,抓狂
还有进入终端字符界面后,会提示输入用户名和密码,提醒不能使用数字小键盘,又是个小小的问题,看来搜索技术资料还是google不错

fbterm--支持中文显示的控制台

fbterm提供了一个快速的终端仿真器,它直接运行在你的系统中的帧缓冲 (framebuffer) 之上。使用帧缓冲可以在终端渲染 UTF-8 文本时可以提高性能。fbterm 旨在提供国际化和现代字体支持时至少与 Linux 内核终端一样快。它允许你在同一个帧缓冲上创建多达 10 个不同的终端窗口,每个窗口都有它的回滚历史。
要运行 fbterm,首先检查当前用户是否在 video 组,如不在,则加入。当运行 fbterm 后,会在用户主目录下生成 .fbtermrc 配置文件,其中可以更换字体样式及大小、默认前/背景色。

若你不能看到中文,按 Ctrl+Alt+E 退出后,再运行下面的命令:

LANG=zh_CN.utf-8 fbterm

1.下面我就安装了fbterm:

sudo apt-get install fbterm

2.安装完后,运行fbterm:

sudo fbterm

3.退出fbterm
在控制台中按 Ctrl+Alt + E 退出

4.当然fbterm功能是很强大的,支持字体样式、大小、样色设置等,修改配置文件.fbtermrc即可,在控制台输入以下命令:

sudo gedit ~/.fbtermrc

打开配置文件,可以根据需要做相应修改保存(然后重新启动fbterm:在控制台输入Ctrl+Alt+E 退出)则可

goagent 3.1.0 开始支持个人配置文件proxy.user.ini,可以将个人每次需要配置修改的信息(如appid名称、密码等)写入其中,这样每次版本更新就无需像以前那样复制粘贴相关设置到proxy.ini中,只需将自己原来旧版本的proxy.user.ini文件复制到local目录下就可以了,方便了很多。程序会优先到个人配置文件中查询配置信息,个人配置文件中没定义的部分则使用proxy.ini中的默认配置。

使用方法很简单,到local目录下复制粘贴一份proxy.ini文件,将新生成的文件改名为proxy.user.ini,只保留自己每次需要修改的部分,其余全部删除后保存即可。如果平时只使用GAE服务端,而且使用goagent的默认配置选项,可参考如下。

[listen]
visible = 0
debuginfo = 0

[gae]
appid = appid1|appid2
password = yourpassword

如果是像上篇小文中那样,使用自定义ip的话,个人配置具体参考如下。

[listen]
visible = 0
debuginfo = 0

[gae]
appid = appid1|appid2
password = yourpassword

[iplist]
google_cn = 173.194.127.50|173.194.127.49|173.194.127.48|173.194.127.46
google_hk = 173.194.127.50|173.194.127.49|173.194.127.48|173.194.127.46

[ipv4/http]
withgae = play.google.com
forcehttps = groups.google.com|docs.google.com
fakehttps =

[love]
enable = 0

其他配置项修改以此类推,可按自己使用习惯设置。

延伸阅读:
goagent配置文件proxy.ini各项参数介绍
GoAgent常见的使用问题汇总解答

字符串比较 结果
string1 = string2 string1等于string2:True, 否则False
string1 != string2 string1等于string2:False, 否则True
-n string string不等于null时:True,否则False
-z string string等于null时:True,否则False

 

算术比较 结果
expression1 -eq expression2 表达式相等:True,否则False
expression1 -ne expression2 表达式不相等:True,否则False
expression1 -gt expression2 表达式expression1 大于expression2时:True,否则False
expression1 -ge expression2 表达式expression1 大于等于expression2时:True,否则False
expression1 -lt expression2 表达式expression1 小于expression2时:True,否则False
expression1 -le expression2 表达式expression1 小于等于expression2时:True,否则False
! expression expression为True时,则为False,反之依然

 

 文件条件 结果
 -d file file是目录时:True,否则False
 -e file 如果file存在:True,否则False 注意:历史原因-e选项不具有可移植性,因此使用-f来替代
-f file file存在:True,否则False
-g file 如果file被“set-group-id”设置时:True,否则False
-r file file是可读的:True,否则False
-s file file的size大于0:True,否则False
-u file file被“set-user-id"设置:True,否则False
-w file file可写:True,否则False
-x file file是可执行文件:True,否则False

#!/bin/bash

dire="/tmp/piaoyun/"
if [-d "$dire" ]; then
rmdir "$dire"
mkdir "$dire"
else
mkdir "$dire"
fi

if [ ! -d "$dire" ]; then
mkdir "$dire"
fi

find ./ -type f |awk -F"./" '{print $2}' >filename即可得到文件名文件

find ./ -type f |awk -F"./" '{print "rm -rf",$2}' >filename即可得到删除所有文件的命令脚本
shell判断文件,目录是否存在或者具有权限
#!/bin/sh
PiaoYunPath="/var/piaoyun"
PiaoYunFile="/var/piaoyun/piaoyun.cc.log"

#这里的-x 参数判断$PiaoYunPath是否存在并且是否具有可执行权限

if [ ! -x "$piaoyunPath"]; then
mkdir “$piaoyunPath”
fi

#这里的-d 参数判断$PiaoYunPath是否存在
if [ ! -d "$piaoyunPath"]; then
mkdir “$piaoyunPath”
fi

#这里的-f参数判断$PiaoYunFile是否存在
if [ ! -f "$piaoyunFile" ]; then
touch “$piaoyunFile”
fi

#其他参数还有-n,-n是判断一个变量是否是否有值
if [ ! -n "$piaoyunVar" ]; then
echo “$piaoyunVar is empty”
exit 0
fi

#两个变量判断是否相等
if [ "$var1" = "$var2" ]; then
echo ‘$var1 eq $var2′
else
echo ‘$var1 not eq $var2′
fi

注意:if判断时 [ ]与里面的语句要有个空格:if [ -d "$dire" ]; then

最近刚把服务器系统更换为centos了,更换系统前数据被临时转移到其他服务器,迁移过程肯定是要转移数据的。以前虚拟主机迁移数据的模式是非常低效率的,旧主机打包下载->新主机上传再解压缩,由于家庭网络带宽非常低,而且ADSL的上行速率512kbps万年不变,导致以前迁移网站绝对是体力活...
现在有了VPS,有了shell,这个过程就无比简单了,借助机房的大带宽,直接机房对机房互传文件看着简直就是一种享受啊

017

好了,讲一下方法:
1、旧虚拟主机打包备份整站 piaoyun.tar.gz
2、在VPS的shell中利用wget下载旧虚拟主机中的piaoyun.tar.gz,使用FTP协议

wget --ftp-user=username --ftp-password=password -m -nH ftp://piaoyun.cc/piaoyun/cc/piaoyun.tar.gz
wget --ftp-user=username --ftp-password=password -r -m -nH ftp://piaoyun.cc:1234/piaoyun/cc/*

上面就是命令了,FTP用户名密码参数不解释;
-r 可选,表示递归下载,如果直接下载整个目录就需要该参数;
-m 表示镜像,不解释;
-nH表示不生成那一堆层级目录【不生成IP目录】,直接从当前目录开始显示,非常好的参数;

后面是ftp的地址,斜杠后的 * 表示下载该目录下的所有文件,如果只是一个文件,直接输入文件名即可。

Linux系统中的wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。
wget 可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作”递归下载”。在递归下载的时候,wget 遵循Robot Exclusion标准(/robots.txt). wget可以在下载的同时,将链接转换成指向本地文件,以方便离线浏览。
wget 非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。

一、命令格式:

wget [参数] [URL地址]

二、命令功能:

用于从网络上下载资源,没有指定目录,下载资源回默认为当前目录。wget虽然功能强大,但是使用起来还是比较简单:
1)支持断点下传功能;这一点,也是网络蚂蚁和FlashGet当年最大的卖点,现在,Wget也可以使用此功能,那些网络不是太好的用户可以放心了;
2)同时支持FTP和HTTP下载方式;尽管现在大部分软件可以使用HTTP方式下载,但是,有些时候,仍然需要使用FTP方式下载软件;
3)支持代理服务器;对安全强度很高的系统而言,一般不会将自己的系统直接暴露在互联网上,所以,支持代理是下载软件必须有的功能;
4)设置方便简单;可能,习惯图形界面的用户已经不是太习惯命令行了,但是,命令行在设置上其实有更多的优点,最少,鼠标可以少点很多次,也不要担心是否错点鼠标;
5)程序小,完全免费;程序小可以考虑不计,因为现在的硬盘实在太大了;完全免费就不得不考虑了,即使网络上有很多所谓的免费软件,但是,这些软件的广告却不是我们喜欢的。

三、命令参数:

启动参数:
-V, -version 显示wget的版本后退出
-h, -help 打印语法帮助
-b, -background 启动后转入后台执行
-e, -execute=COMMAND 执行 . wgetrc 格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc
记录和输入文件参数:
-o, -output-file=FILE 把记录写到FILE文件中
-a, -append-output=FILE 把记录追加到FILE文件中
-d, -debug 打印调试输出
-q, -quiet 安静模式(没有输出)
-v, -verbose 冗长模式(这是缺省设置)
-nv, -non-verbose 关掉冗长模式,但不是安静模式
-i, -input-file=FILE 下载在FILE文件中出现的URLs
-F, -force-html 把输入文件当作HTML格式文件对待
-B, -base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
-sslcertfile=FILE 可选客户端证书
-sslcertkey=KEYFILE 可选客户端证书的KEYFILE
-egd-file=FILE 指定EGD socket的文件名

下载参数:
-bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t, -tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
-O -output-document=FILE 把文档写到FILE文件中
-nc, -no-clobber 不要覆盖存在的文件或使用.#前缀
-c, -continue 接着下载没下载完的文件
-progress=TYPE 设定进程条标记
-N, -timestamping 不要重新下载文件除非比本地文件新
-S, -server-response 打印服务器的回应
-spider 不下载任何东西
-T, -timeout=SECONDS 设定响应超时的秒数
-w, -wait=SECONDS 两次尝试之间间隔SECONDS秒
-waitretry=SECONDS 在重新链接之间等待1…SECONDS秒
-random-wait 在下载之间等待0…2*WAIT秒
-Y, -proxy=on/off 打开或关闭代理
-Q, -quota=NUMBER 设置下载的容量限制
-limit-rate=RATE 限定下载输率

目录参数:
-nd -no-directories 不创建目录
-x, -force-directories 强制创建目录
-nH, -no-host-directories 不创建主机目录
-P, -directory-prefix=PREFIX 将文件保存到目录 PREFIX/…
-cut-dirs=NUMBER 忽略 NUMBER层远程目录

HTTP 选项参数:
-http-user=USER 设定HTTP用户名为 USER.
-http-passwd=PASS 设定http密码为 PASS
-C, -cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许)
-E, -html-extension 将所有text/html文档以.html扩展名保存
-ignore-length 忽略 Content-Length 头域
-header=STRING 在headers中插入字符串 STRING
-proxy-user=USER 设定代理的用户名为 USER
-proxy-passwd=PASS 设定代理的密码为 PASS
-referer=URL 在HTTP请求中包含 Referer: URL 头
-s, -save-headers 保存HTTP头到文件
-U, -user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION
-no-http-keep-alive 关闭 HTTP活动链接 (永远链接)
-cookies=off 不使用 cookies
-load-cookies=FILE 在开始会话前从文件 FILE中加载cookie
-save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中

FTP 选项参数:
-nr, -dont-remove-listing 不移走 .listing 文件
-g, -glob=on/off 打开或关闭文件名的 globbing机制
-passive-ftp 使用被动传输模式 (缺省值).
-active-ftp 使用主动传输模式
-retr-symlinks 在递归的时候,将链接指向文件(而不是目录)
递归下载参数:
-r, -recursive 递归下载--慎用!
-l, -level=NUMBER 最大递归深度 (inf 或 0 代表无穷)
-delete-after 在现在完毕后局部删除文件
-k, -convert-links 转换非相对链接为相对链接
-K, -backup-converted 在转换文件X之前,将之备份为 X.orig
-m, -mirror 等价于 -r -N -l inf -nr
-p, -page-requisites 下载显示HTML文件的所有图片
递归下载中的包含和不包含(accept/reject):
-A, -accept=LIST 分号分隔的被接受扩展名的列表
-R, -reject=LIST 分号分隔的不被接受的扩展名的列表
-D, -domains=LIST 分号分隔的被接受域的列表
-exclude-domains=LIST 分号分隔的不被接受的域的列表
-follow-ftp 跟踪HTML文档中的FTP链接
-follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表
-G, -ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表
-H, -span-hosts 当递归时转到外部主机
-L, -relative 仅仅跟踪相对链接
-I, -include-directories=LIST 允许目录的列表
-X, -exclude-directories=LIST 不被包含目录的列表
-np, -no-parent 不要追溯到父目录
wget -S -spider url 不下载只显示过程

四、使用实例:

实例1:使用wget下载单个文件
命令:wget http://piaoyun.cc/piaoyun.cc.zip
说明:
以下的例子是从网络下载一个文件并保存在当前目录,在下载的过程中会显示进度条,包含(下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间)。

实例2:使用wget -O下载并以不同的文件名保存
命令:wget -O wordpress.zip http://piaoyun.cc/download.aspx?id=1080
说明:wget默认会以最后一个符合”/”的后面的字符来命令,对于动态链接的下载通常文件名会不正确。
错误:下面的例子会下载一个文件并以名称download.aspx?id=1080保存
wget http://piaoyun.cc/download?id=1
即使下载的文件是zip格式,它仍然以download.php?id=1080命令。
正确:为了解决这个问题,我们可以使用参数-O来指定一个文件名:wget -O piaoyun.cc.zip http://piaoyun.cc/download.aspx?id=1080

实例3:使用wget -limit -rate限速下载
命令:wget --limit-rate=300k http://piaoyun.cc/piaoyun.cc.zip
说明:当你执行wget的时候,它默认会占用全部可能的宽带下载。但是当你准备下载一个大文件,而你还需要下载其它文件时就有必要限速了。

实例4:使用wget -c断点续传
命令:wget -c http://piaoyun.cc/piaoyun.cc.zip
说明:使用wget -c重新启动下载中断的文件,对于我们下载大文件时突然由于网络等原因中断非常有帮助,我们可以继续接着下载而不是重新下载一个文件。需要继续中断的下载时可以使用-c参数。

实例5:使用wget -b后台下载
命令:wget -b http://piaoyun.cc/piaoyun.cc.zip
说明:对于下载非常大的文件的时候,我们可以使用参数-b进行后台下载。
wget -b http://piaoyun.cc/piaoyun.cc.zip
Continuing in background, pid 1840.
Output will be written to `wget-log'.
你可以使用以下命令来察看下载进度:
tail -f wget-log

实例6:伪装代理名称下载
命令:wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://piaoyun.cc/piaoyun.cc.zip
说明:有些网站能通过根据判断代理名称不是浏览器而拒绝你的下载请求。不过你可以通过-user-agent参数伪装。

实例7:使用wget --spider测试下载链接
命令:wget --spider http://piaoyun.cc
说明:当你打算进行定时下载,你应该在预定时间测试下载链接是否有效。我们可以增加-spider参数进行检查。
wget --spider http://piaoyun.cc
如果下载链接正确,将会显示
wget --spider URL
Spider mode enabled. Check if remote file exists.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.
这保证了下载能在预定的时间进行,但当你给错了一个链接,将会显示如下错误
wget --spider url
Spider mode enabled. Check if remote file exists.
HTTP request sent, awaiting response... 404 Not Found
Remote file does not exist -- broken link!!!
你可以在以下几种情况下使用spider参数:
定时下载之前进行检查
间隔检测网站是否可用
检查网站页面的死链接

实例8:使用wget -tries增加重试次数
命令:wget --tries=40 http://piaoyun.cc
说明:如果网络有问题或下载一个大文件也有可能失败。wget默认重试20次连接下载文件。如果需要,你可以使用-tries增加重试次数。

实例9:使用wget -i下载多个文件
命令:wget -i filelist.txt
说明:
首先,保存一份下载链接文件
cat > filelist.txt
url1
url2
url3
url4
接着使用这个文件和参数-i下载

实例10:使用wget -mirror镜像网站
命令:wget --mirror -p --convert-links -P ./LOCAL http://piaoyun.cc
网站本地镜像命令:wget -r -p -np -k http://piaoyun.cc
说明:
下载整个网站到本地。
-miror:开户镜像下载
-p:下载所有为了html页面显示正常的文件
-convert-links:下载后,转换成本地的链接
-P ./LOCAL:保存所有文件和目录到本地指定目录

实例11:使用wget --reject过滤指定格式下载
命令:wget --reject=gif http://piaoyun.cc
说明:下载一个网站,但你不希望下载图片,可以使用以下命令。

实例12:使用wget -o把下载信息存入日志文件
命令:wget -o download.log http://piaoyun.cc
说明:不希望下载信息直接显示在终端而是在一个日志文件,可以使用

实例13:使用wget -Q限制总下载文件大小
命令:wget -Q5m -i filelist.txt
说明:当你想要下载的文件超过5M而退出下载,你可以使用。注意:这个参数对单个文件下载不起作用,只能递归下载时才有效。

实例14:使用wget -r -A下载指定格式文件
命令:wget -r -A.pdf http://piaoyun.cc/piaoyun.cc
说明:
可以在以下情况使用该功能:
下载一个网站的所有图片
下载一个网站的所有视频
下载一个网站的所有PDF文件

实例15:使用wget FTP下载
命令:
wget ftp-url
wget --ftp-user=USERNAME --ftp-password=PASSWORD http://piaoyun.cc
wget --ftp-user=username --ftp-password=password -m -nH ftp://piaoyun.cc/piaoyun/cc/piaoyun.tar.gz
wget --ftp-user=username --ftp-password=password -r -m -nH ftp://piaoyun.cc:1234/piaoyun/cc/*
wget --ftp-user=username --ftp-password=password -r -m -b -nH ftp://piaoyun.cc:1234/piaoyun/cc/*

说明:
可以使用wget来完成ftp链接的下载。
使用wget匿名ftp下载:
wget ftp-url
使用wget用户名和密码认证的ftp下载
wget --ftp-user=USERNAME --ftp-password=PASSWORD url

备注:编译安装wget
使用如下命令编译安装:
# tar zxvf wget-1.9.1.tar.gz
# cd wget-1.9.1
# ./configure
# make
# make install

17ce是一个非常出名的http测试网站,他通过分部在世界各地的服务器,来你的网站进行http测试,从而得出链接时间、响应时间等等的数据,是站长一个不错的分析工具。
但是,17ce凭借这他分部在全球各地的服务器,如果不怀好意的人,狂对你的站进行测试,那你就蛋疼了。
虽然17ce有对一个网站每小时进行测试的限制,但是仍有十分大的杀伤了。

请见hostloc全球dd/cc攻防论坛的帖子
QQ截图20140818104636

出于此,我就决定在nginx处封杀17ce

在nginx.conf中的location中添加以下代码

if ($http_user_agent ~ "~17ce.com") { return 403; }
if ($http_referer ~* 17ce.com) { return 403; }

对于来自17ce的请求全部回显403

效果如下:
17ce_5

一,Rewrite重写时带“?”(问号)参数的传递

很多人都会遇到需要将网站以前的旧URL转换到新版本的新URL来,但是有一些带有参数的地址由于涉及到参数名的变更,需要通过伪静态的方式实现跳转。但Apache和Ngnix的方法是不支持带参数的URL地址重写的(即:RewriteRule不会去匹配“?”后面的字符串的,需要用RewriteCond来匹配)。

例如:把 /abc?id=123 重定向到 /def.php?id=123 的写法:
方式一:
RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^id=(.+)$
RewriteRule ^/abc$ /def.php?sid=%1 [L]
#注释1:RewriteCond %{QUERY_STRING} ^id=(.+)$ ,得到url中的变量,并通过“%N”的方式获取(参数名可以重写,而且参数值可以匹配)
#注释2:RewriteCond 里面需要提取的值可以用 %N 进行反向引用值,而RewriteRule里面还是需要用$N的来反向引用值

方式二:
RewriteEngine on
RewriteBase /
RewriteRule ^/abc$ /def.php [L,QSA]
#注释1:[QSA]表示保留重写url时“?”后面的参数(但参数名不可以重写,只会原样的保留)

官方文档解释(查询字符串):
Pattern不会按照查询字符串进行匹配。为了达到这个目的,你必须使用一个带有% {QUERY_STRING}变量的RewriteCond指令。当然,你也可以在替换字符串中创建包含查询字符串的URL:在替换字符串串中使用问号,以标明其后的部分应该被重新注入到QUERY_STRING中。而要删除一个已有的请求串,则可以用问号来终结替换字符串。为了联合新旧查询字符串,请使用[QSA]标志。

二、apache rewrite 终结篇:apache %{QUERY_STRING}
1.$n取得第n个参数值
RewriteRule ^sss/(.*)/(.*)$ zdz/index.php?arg1=$1&arg2=$2

2.query_string(%{QUERY_STRING}后为匹配的正则)
URL参数(Query String)是URL里面“?”后面的部分,它通常用于传输参数给CGI脚本或者其它动态页面。在Apache中,该值存储在环境变量QUERY_STRING中(在PHP中,可以通过$_SERVER['QUERY_STRING']访问到)。
在Apache中,大多对URL进行操作的指令,如、Redirect、Alias和RewriteRule,都不能直 接访问该数据;不过,mod_rewrite模块却可以对URL参数进行添加、删除和修改。其中的关键就是使用RewriteCond来匹配% {QUERY_STRING}变量,如果需要的话,还可以使用[QSA]标志来附加URL参数。

eg.1
如果 http://piaoyun.cc/rewrite/jeecn.zdz?par=helloforbworld 中的 query_string 包含字符串forb ,则禁止访问
RewriteCond %{QUERY_STRING} forb
RewriteRule ^(.*)\.(.*)$ preg.php?%{QUERY_STRING} [F]

eg.2
通过[QSA]标志保留原有URL参数的同时,在后面增加新的URL参数:param=value
RewriteRule ^/page /page?param=value [QSA]

eg3.
当URL参数包含字符串parm时
将URL:http://jeecn.com/ask?param=value 重写为: http://jeecn.com/answer?param=value
RewriteCond %{QUERY_STRING} parm
RewriteRule ^/ask /answer

eg4.%n反向引用
1)当访问 /path 时,将字符串 parm修改为 showparm
RewriteCond %{QUERY_STRING} ^(.*)parm(.*)$
RewriteRule /path /path?%1showparm%2
上面的%1和%2是反向引用,来自之前的RewriteCond中正则表达式的匹配结果

2)将http://jeecn.com/path?key=value 转换为: http://piaoyun.cc/path/key/value
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^/path /path/%1/%2?

当我们在使用sql server 的时候可能会遇见这样错误提示“无法连接到.,用户'sa'登录失败(错误18456)”,

如图:
063535579

具体的解决方案:

首先使用管理员身份打开SQL server ,并且以windows身份进入。
然后打开“安全性”--“登录名”中找到用户“sa”打开其属性面板。
如图:
1

接下来选择“常规”设置密码,并且点击“确定”保存。
如图:
2

然后选择“状态”--登录设置为“启用”,并且点击“确定”保存。
如图:
3

然后再打开sql服务器属性页面操作是“选择服务器右击--属性”,选择“安全性”将服务器身份验证选择为“SQL server 和 Windows 身份验证模式(s)”,点击“确定”保存。
如图:
4

最后再右击服务器选择“重新启动(A)”,将服务器重新启动就OK 了。
如图:
5

假如以上的办法还是不能解决就再进行一下的操作:
打开 “开始菜单”——“Microsoft SQL Server 2008”——“配置工具”——“Microsoft SQL Server 2008”选择“SQL server网络配置”将其中的“Named Pipes状态”“TCP\IP状态”全部修改为“已启用”
如图:
6

完成这些操作以后,你的问题就解决了。

TortoiseGit 是Windows下的可视化Git界面.在windows下使用git最好的软件就是TortoiseGit,类似与TortoiseSVN小乌龟。

一、安装git工具

安装前必须装上msysgit才能在Windows上使用Git
安装顺序:
——先安装msysgit,再安装TortoiseGit

msysgit下载地址:
百度网盘:http://pan.baidu.com/s/1pJylH4B
360云盘:http://yunpan.cn/QaKbYyHnS9HWq  访问密码:b114
网站地址:http://msysgit.github.io/

TortoiseGit 下载地址:
百度网盘:http://pan.baidu.com/s/1qWI22mw
360云盘:http://yunpan.cn/QaKbPAzrge8Sb  访问密码:02de
网站地址:http://code.google.com/p/tortoisegit/

安装Git:
先安装msysgit,因为已经有TortoiseGit作为操作界面,所以到选择组件时时按下图设置:
015

安装完之后使用git bash.
git bash是Windows下的命令行工具。
基于msys GNU环境,有git分布式版本控制工具,也主要用于git。

1.Git 安装过程截图:
3 4 5 6 7 8 9 10

2.TortoiseGit 安装过程截图:
11 12 13 14 15 16 17

二、关于git和github的一些概念

repository [ri'p?zit?ri] 知识库,版本库,代码库
collaborate [k?'l?b?ret] 合作,协作,协同
git 是一个快速高效的、分布式的版本控制系统,完美适用于协作式软件开发。
github 是与其他人协作做好的方式。
fork 分支
brunch 分支

三、向github中托管代码

1.set up git

1.配置Username和Email

git config --global user.name "Your Name Here"
git config --global user.email "your_email@example.com"

2.配置git和gitbash可以正常显示中文

安装完git后,默认对中文支持是灰常有限的,为了支持中文需要做一系列配置:

1、Git Bash 中输入 ls 命令,可以正常显示中文文件名:

修改%Gi%t\etc\git-completion.bash,如果没有则在末尾添加下面一行:

alias ls='ls --show-control-chars --color=auto'

2、在Git Bash 中可以正常输入中文:

修改%Git%\etc\inputrc,修改配置项如下:

set output-meta on
set convert-meta off

3、Git Bash中查看日志是能正常显示中文:
修改%Git%\etc\profile,在末尾添加如下一行:

export LESSCHARSET=utf-8

4、在git gui 中正常显示代码中的中文:

修改%Git%\etc\gitconfig,添加如下配置项(如果代码文件是gb2312编码,就填gb2312)

[gui]
encoding = utf-8

5、正常显示推、拉中文修订说明

修改%Git%\etc\gitconfig,添加如下配置项

[i18n]
commitencoding = GB2312

说明:若没有此项存在两个问题,一、我们推到服务器的中文修订说明会变成乱码;二、我们从服务器拉下来的别人推上去的中文修订说明也会是乱码。
2.create a repo

首先在github上新建一个repo,如 MyTools,然后在git bash中操作

mkdir MyTools
cd MyTools
git init

10172730-42e4432f38c148a0bbd9fd36a62f8213

touch README
--edit README file
git add README
git commit –m 'the first commit for git'

2

git remote add origin https://github.com/FrankFan/MyTools.git
git push origin master

3
4

说明:
touch和cat的区别
cat 一般是用来查看文本文件内容
touch可以新建一个空文件,可以修改文件的创建时间
update 2013-05-17

1.如果要删除一个文件,使用

git remove READ

删除之后再git add <file>则不会在索引中删除这个文件,必须通过使用-a选项的命令:

git commit -a -m 'now file READ is removed'

2. git clone
把github上的源代码库拷贝到本地:

git clone https://github.com/FrankFan/DatabasePicExporter

 

TortoiseGit是一个开放的,为的git版本控制系统的源客户端。像一个普通的文件服务器,除了会记得您有史以来的文件和目录的每一个变化外,还可以恢复您的文件的旧版本,并研究如何以及何时改变了历史数据,谁改变了它。

git相对于其他的版本控制,优势在于分支管理。

几个常见情况及分支使用方法。

1 对于自己的代码修改后,却已经不知道服务器上的代码是否已经发生改变。此时想上传自己的代码。
1)在master上创建分支mysrc;
2)switch到mysrc分支,进行修改代码;
3)修改好代码后,进行git commit操作;
4)switch到master分支,进行git pull操作,将服务器上的代码签下来;
5)进行git merge from mysrc操作,将mysrc的代码合并到master中;
6)git commit操作;
7)git push操作。

2 修改自己的代码过程中,还不需要上传时,需要从服务器上签新的代码,但保留当前的代码修改。
1)在master上创建分支mysrc;
2)switch到mysrc分支,进行代码修改;
3)进行git commit 操作;
4)switch到master分支,进行git pull操作;
5)switch到mysrc分支,进行git merge from master操作;
6)git commit操作。

3 修改了代码,但仅想上传部分代码,其余代码保留同服务器版本。
1)在master上创建分支mysrc;
2)switch到mysrc分支,进行代码修改;
3)修改好后,对部分代码进行git commit操作;
4)进行git rebase操作,将其他代码还原;
5)switch到master分支,进行git merge from mysrc操作;
6)git push操作。

最近公司网站后台运行了不少定时任务,为了防止 这些定时任务出现异常,加上了一个phpmailer的功能。

定时任务执行成功会发邮件提醒我。执行失败也会邮件提醒任务失败和相关的异常信息,方便及时针对错误进行快速处理。

大概的代码可以查phpmailer官方的文档,发邮件的功能,非常简单。

PHPMailer官方提供的使用php发送邮件的代码为:

<?php
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'user@example.com'; // SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable encryption, 'ssl' also accepted
$mail->From = 'from@example.com';
$mail->FromName = 'Mailer';
$mail->addAddress('joe@example.net', 'Joe User'); // Add a recipient
$mail->addAddress('ellen@example.com'); // Name is optional
$mail->addReplyTo('info@example.com', 'Information');
$mail->addCC('cc@example.com');
$mail->addBCC('bcc@example.com');
$mail->WordWrap = 50; // Set word wrap to 50 characters
$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}

在使用的时候,要修改一下:
我使用的是QQ邮箱发送邮件,修改方法为

$mail->isSMTP();
$mail->CharSet = "utf-8"; //设置采用utf-8中文编码(内容不会乱码)
$mail->Host = "smtp.qq.com";
$mail->Port = 465;
$mail->SMTPSecure = 'ssl';
$mail->SMTPAuth = true;

然后写上帐号密码就可以发送邮件了。

遇到 的问题是本地正常发送邮件了,传到一台临时服务器出错了,传到线上正常的。为了找到原因。仔细做了检查。
提示信息为:SMTP Connect() failed。本地正常,临时服务器不正常,应该与代码无关,与PHP环境或者Apache环境有关系。
网上流传的解决方案是:
linux 下 用phpmailer类smtp发送邮件始终不成功,
开启DEBUG提示:ERROR: Failed to connect to server: (0)
SMTP Connect() failed
===============
在windows下测试是完全没有问题的,传到网上的linux的VPS或者虚拟主机发送邮件不行,开启debug后,出现的错误是这样的,我在windows下测试这个smtp服务器是可以连接的,到了Linux就不行呢?
网上有很多解决方案,第一是防火墙禁止端口的说法,但是否决,我本地有一台装linux用作本地测试用的服务器,我传到本地,同样不能发送,也是这样的错误。不过这里我关闭了selinux,iptables。都还是不行。证明应该不是端口的问题。
解决方案二:php的scoktes这个没开启。我用phpinfo查看了下,绝对的没问题,scoktes这个选项是 开启的。
方案三:用pfsockopen 函数替换 fsockopen函数 ,有的说替换以上的函数可以,但是测试后还是不行
CSDN上某人说解决过,但是又不留方法。如果是我,我肯定留下方案。
研究了很多终于知道了,原来是服务器的php.ini 禁用了fsockopen函数。
你可以打开php.ini。有两个地方可能禁用此函数:

1、 allow_url_fopen = On选项是否为ON,为OFF时函数将被禁用
2、查看 disable_functions = ..........后有没有 fsockopen。如果有去掉

检查之后发现并不是这个问题。
仔细思索才发现我们的SMTP使用的是SSL登陆到QQ的SMTP服务器。
打开测试PHP环境,发现并没有开启php_openssl模块,汗一个。

开启之后一切正常。。。

现在可以放心了,不管成功还是异常,都会收到邮件提醒!
自己在搭建PHP环境的时候,一些常用的模块还是必须要开启的。
比如php 5.3以上的mb-string、openssl、curl、mysql、mysqli、pdo_mysql等。

有些特别的情况下,可以自己监控一些特别的东西,定时发邮件,PHP来处理也是蛮方便的。

一、安装python

要运行wallproxy首先必须安装了python,推荐使用python2.7,如果没有python,使用命令:

sudo apt-get install python

二、安装gevent

使用以下命令进行安装

需要在安装Python-dev这个包之后才能正确安装gevent

sudo apt-get install python-dev

如果greenlet版本过低会导致gevent装不上,请先使用以下命令安装greenlet(0.4.2)

curl -L -O https://github.com/python-greenlet/greenlet/archive/0.4.2.tar.gz && tar xvzpf 0.4.2.tar.gz && cd greenlet-0.4.2 && sudo python setup.py install

安装gevent(1.0.1),系统源中gevent版本过低,会出现错误

curl -L -O https://github.com/surfly/gevent/releases/download/1.0.1/gevent-1.0.1.tar.gz && tar xvzpf gevent-1.0.1.tar.gz && cd gevent-1.0.1 && sudo python setup.py install

三、安装pyopensssl

PyOpenSSL是OpenSSL的python接口,用于提供加密传输支持(SSL),如果没有该模组,会导致wallproxy会无法生成证书而影响使用。

若系统没有openssl,先安装openssl,****一般系统都已安装,可以忽略此步****

wget http://www.openssl.org/source/openssl-1.0.1h.tar.gz
tar zxvf openssl-1.0.1h.tar.gz
cd openssl-1.0.1h
#设定Openssl 安装,( --prefix )参数为欲安装之目录,也就是安装后的档案会出现在该目录下
./config --prefix=/usr/local/openssl
make && make install
wget http://www.openssl.org/source/openssl-1.0.1h.tar.gz && tar zxvf openssl-1.0.1h.tar.gz && cd openssl-1.0.1h && ./config --prefix=/usr/local/openssl && sudo make && sudo make install

安装pyopenssl(0.14)

wget http://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.14.tar.gz && tar zxvf pyOpenSSL-0.14.tar.gz && cd pyOpenSSL-0.14 && sudo python setup.py install

四、上传

Linux/MAC系统下WallProxy完整版下载地址:http://goo.gl/D2UJv
Windows系统下WallProxy完整版下载地址:http://goo.gl/dFtij

下载wallproxy,解压,终端cd至wallproxy所在目录
cd至server目录下,终端执行

python uploader.py

根据提示输入你自己创建的appid(若要同时上传多appid在appid之间用|隔开)和你的Gmail帐号和密码(如果开启了两步验证,密码为16位的应用程序专用密码)

五:运行客户端

cd至local目录下,终端执行

python startup.py
chmod +x startup.py

也可以赋予startup.py可执行权限之后直接双击startup.py。(在startup.py上面右击,属性的权限中勾选允许以程序执行文件)

Windows下有wallproxy.exe,设置一下开机自动启动就好了,linux下就难玩了。。。
每次都要手动到local文件夹下开终端运行

python startup.py

还占着一个终端的位置不能关。烦呐!今天费尽心思把这事给结了。
步骤如下,终端输入:

sudo vi /etc/rc.local

打开的文件中,在 exit 0 之前输入

nohup python /usr/local/wallproxy/local/startup.py &

startup.py的路径记得改成你自己的。保存退出即可。重启可测验效果。
这里使用了nohup命令,即no hangout, 不挂断的运行命令。
Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。
使用nohup后即可在后台持续的运行命令。加入rc.local后是为了开机自动启动。

六、为浏览器导入ssl证书

在Ubuntu下大家使用的浏览器多为FF和Chromium(Chrome),FF导入证书的方法很简单,这里只说Chromium的方法。
在打开过一次代理后,在wallproxy/local/文件夹下可以看到新生成了cert文件夹,cert文件夹下的ca.crt就是wallproxy的ssl证书。首先安装libnss3-tools:

sudo apt-get install libnss3-tools

然后导入证书(假设ca.crt所在路径为:/usr/local/wallproxy/cert/):

certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n WallProxy -i '/usr/local/wallproxy/cert/ca.crt'

这样证书就导入成功了~
如果需要查看及删除的话
列出所有证书:

certutil -d sql:$HOME/.pki/nssdb -L

查看证书详细信息:

certutil -d sql:$HOME/.pki/nssdb -L -n WallProxy

删除证书:

certutil -d sql:$HOME/.pki/nssdb -D -n WallProxy

在导入证书后,通过WallProxy代理访问https网站就正常了~
PS:WallProxy的更多高级应用可以查看WallProxy文件夹下的readme.txt

写在结尾的话:本博文不定期更新。有什么的问题或者其他的不定时的更新!

电影《社交网络》中,facebook创始人马克.扎克失恋后入侵哈佛大学宿舍楼服务器,窃取数据库资料,并在两个小时内完成了一个给校内女生评分的交互网站,该网站一天内点击数过10W,直接导致学校服务器崩溃。。。。。。
其实,构建那样一个网站并不需要很多高深的技术,任何一个有一定网络编程基础的人都可以做到。马克构建网站所用的是Apache服务器和PHP服务器脚本语言,我曾经用三天时间学习PHP,然后用了两个星期为学校写了一个网站,可见PHP是很简单的,而facebook后台也是用php写的,当然,大家现在看到的我的wordpress博客后台也是php~~。

话说回来,很多人可能已经用上ubuntu了,大家可能花了大量时间在ubuntu的美化上,这无可厚非,但是,ubuntu应该给我们的工作和学习带来更多的便利和方便。ubuntu作为linux,为我们提供了强大的网络方面的功能,其中的服务器技术尤其强大,安全。如果不学习linux的网络技术,很难说自己掌握了linux。

今天,我在ubuntu下配置了一个Apache服务器。通过Apache我们可以学习php网络编程,可以用它来部署自己本地的wordpress博客,从而进一步通过网络和朋友交流。从此,你将深刻体会到网络带个我们的神奇力量,至少我是这样觉得的~~

步骤一、安装apache2

sudo apt-get install apache2

安装完成。

运行如下命令重启下:

sudo /etc/init.d/apache2 restart

在浏览器里输入http://localhost或者是http://127.0.0.1,如果看到了It works!,那就说明Apache就成功的安装了,Apache的默认安装,会在/var下建立一个名为www的目录,这个就是Web目录了,所有要能过浏览器访问的Web文件都要放到这个目录里。

步骤二、安装php

sudo apt-get install libapache2-mod-php5 php5 php5-curl php5-dev php5-gd php5-gmp php5-imap php5-ldap php5-mcrypt

此外,建议安装扩展php5-gd php5-mysql,安装方式同上.

安装完后,我们要重新启动Apache,让它加载PHP模块:

sudo /etc/init.d/apache2 restart

接下来,我们就在Web目录下面新建一个test.php文件来测试PHP是否能正常的运行,命令:

sudo gedit /var/www/test.php

然后输入:

<?php
echo phpinfo();
?>

接着保存文件,在浏览器里输入http://127.0.0.1/test.php,如果在网页中显示hello,world!!,那就说明PHP已经正常运行了。

步骤三、安装mysql数据库:

sudo apt-get install mysql-server mysql-client

apt-get程序会自动下载安装最新的mysql版本。在安装的最后,它会要求里输入root的密码,注意,这里的root密码可不是Ubuntu的root密码啊,是你要给MySQL设定的root密码。

步骤四、安装phpmyadmin-Mysql数据库管理

sudo apt-get install phpmyadmin

phpmyadmin设置:

在安装过程中会要求选择Web server:apache2或lighttpd,使用空格键选定apache2,按tab键然后确定。然后会要求输入设置的Mysql数据库密码连接密码Password of the database’s administrative user。

然后将phpmyadmin与apache2建立连接,以我的为例:www目录在/var/www,phpmyadmin在/usr/share /phpmyadmin目录,所以就用命令:

sudo ln -s /usr/share/phpmyadmin /var/www

建立链接。

phpmyadmin测试:在浏览器地址栏中打开http://localhost/phpmyadmin。

以上ALMP的基本组件就安装完毕了,下面我们再来看一些其他的设置:

步骤五、设置Ubuntu文件执行读写权限

LAMP组建安装好之后,PHP网络服务器根目录默认设置是在:/var/www。由于Linux系统的安全性原则,改目录下的文件读写权限是只允许root用户操作的,所以我们不能在www文件夹中新建php文件,也不能修改和删除,必须要先修改/var/www目录的读写权限。在界面管理器中通过右键属性不能修改文件权限,得执行root终端命令:

sudo chmod 777 /var/www

然后就可以写入html或php文件了。777是linux中的最高权限,表示可读,可写,可执行。

sudo apt-get install apache2 libapache2-mod-php5 php5 php5-curl php5-dev php5-gd php5-gmp php5-imap php5-ldap php5-mcrypt mysql-server mysql-client phpmyadmin

有很多用户对Unity桌面并不满意,他们认为GNOME 2菜单的解决方案才是正确的道路。经典菜单插件提供了一个可能让所有人满意的妥协

014

Unity可能是排在首位的被用户反对Ubuntu的功能,即使用户量正在不断增加,而且更多的用户开始用它,仍然有不少用户偏好GNOME 2中的菜单显示。

这也是“MATE”桌面环境为什么产生以及其他桌面环境尝试重建GNOME 2方法的原因。现在,如果你能至少对替代左上角的左上角菜单按钮的样子有所妥协,你可能会享受经典菜单插件带来的愉悦之感。

好消息是,经典菜单插件的开发者也为即将到来的Ubuntu 14.04(Trusty Tahr)制作了一个小应用。如果你恰好正在用Ubuntu 14.04的development build,这个插件将会在你的系统中完美运行。

你有两种方法来安装经典菜单插件,一是运行提供的deb文件,二是使用提供的PPA。我们建议你使用第二种添加PPA的做法,因为通过添加PPA,用户可以摆脱手动安装,及时收到此应用的将来的更新。打开终端输入以下命令(需要有root权限):

sudo add-apt-repository ppa:diesch/testing
sudo apt-get update
sudo apt-get install classicmenu-indicator

当安装成功后(应该用不了多久),你可以从Dash中运行这个插件。幸运的是,此插件会自动将自己纳入开机启动的列表,因此你不需要手动添加它。

前几天此插件有一个更新,不过并没有什么高大上的新功能,而且很多只是对界面的修改。比如对经典菜单的子目录中的文字显示的修复,还通过更改配置增加了一些菜单项目。

最新版本的经典菜单插件也实现了一个有意思的变化,就是通过使用Xfce解决了一些没有Unity的发行版(例如Xubuntu)的老问题。

你也可以在官方网站上获取更多关于此更新的细节.

下载经典菜单插件 V0.09:

File Size Modified MD5
classicmenu-indicator-0.09.tar.gz 54.4 KByte 2014-03-07 21:50 b75caec77d7b8a0c728fefa52ab79c8c
classicmenu-indicator_0.09_all.deb 21.8 KByte 2014-03-07 21:50 92aa77a2dbdf7bb7471346ea3515e0a3

IIS6的操作方法:
1、先在IIS里把网站正常发布,例如域名为(www.piaoyun.cc)
2、再硬盘上建一个空文件夹
3、再到IIS里建一个网站,例如域名为(piaoyun.cc),指向这个空文件夹,然后对这个又新建的网站设置属性,在“主目录”里,选择成“重定向到 URL”,在下面的文本框里输入自己的域名(www.piaoyun.cc),再选中“上面输入的准确URL”和"资源的永久重定向"。
IIS7或IIS7.5的操作方法:
1、先在IIS里把网站正常发布,例如域名为(www.piaoyun.cc)
2、再硬盘上建一个空文件夹
3、再到IIS里建一个网站,例如域名为(piaoyun.cc),指向这个空文件夹,然后在这个又新建的网站的“功能视图”里打开“HTTP 重定向”,选中“将请求重定向到此目标”, 在下面的文本框里输入自己的域名(www.piaoyun.cc),再选中“将所有请求重定向到确切的目标(而不是相对于目标)”,状态代码选择成“永久(301)”。

20171122-8fe6e5c65431416ca9e3de17747fc017

这样现在可以测试一下,输入piaoyun.cc,会直接跳转到www.piaoyun.cc
对于参数的问题:
都可以在重定向输入的URL后面加上$S$Q,例如www.piaoyun.cc$S$Q

apache日志为什么不记录百度蜘蛛?这个问题相信很多初学者都基本碰到了,apache日志默认是不记录百度蜘蛛、谷歌和各大搜索引擎的蜘蛛程序的,但只需要修改一个地方就可以解决这个问题,现在就直接将答案写出来:

比如曾经有个朋友在百度知道中提问:

<IfModule log_config_module>
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”" combined
LogFormat “%h %l %u %t \”%r\” %>s %b” common
<IfModule logio_module>
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\” %I %O” combinedio
</IfModule>
CustomLog “logs/access.log” common
</IfModule>

这是我目前的设置,不记住主机名
哪位给我提供个范本 记录访问明细和主机头记录蜘蛛的

1、打开httpd.conf文件找到以下部分:
LogFormat “%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”" combined
LogFormat “%h %l %u %t \”%r\” %>s %b” common

2、接着我们继续向下移动,找到虚拟主机配置段,也就是VirtualHost段,这个是由你自己来配置的。本站的虚拟主机的日志文件是这样设置的:
如果你想记录百度蜘蛛的访问全称,就按色部分设置:

CustomLog /var/html/logs/piaoyun.cc-access.log combined

如果不想记录百度蜘蛛的头部分,则如下设置:

CustomLog /var/html/logs/piaoyun.cc-access.log common

按照以上设置一下,看看你的日志文件是否发生变化了。

wordpress-qiniu-cdn_zpsd75adbce

免费的优质服务谁不爱?凭借 10G 流量 + 10G 存储的免费套餐,七牛云存储快速获得了大批的用户。其中 WordPress 博主占了不小的比例,作为其中的一员,我来说下怎么在不需要插件的情况下让 WordPress 用上七牛云存储 CDN 加速服务。

第一步:创建七牛公开空间

七牛云存储注册地址:https://portal.qiniu.com/

首先,你得有一个七牛账号(这不是废话么~)。什么?你才知道七牛?那还不快注册成为七牛用户,立即享受每月 10G 流量 + 10G 存储的免费服务。

有了账号,你就可以新建空间,我们需要建立一个公开空间。
七牛云存储 - 新建空间

第二步:设置镜像存储

成功建立空间之后,打开该空间的【空间设置】页面。
七牛云存储 - 空间设置

在【域名设置】下,我们知道了该空间的默认域名,你也可以绑定自己的域名,这里不展开讨论。

在【镜像存储】下,点击【一键加速网站】按钮,在弹出的对话框中,【镜像源】填写你的博客地址,确定即可。
七牛云存储 - 加速设置

设置加速后,http://piaoyun.cc/folder/file.jpg 就可以通过 http://piaoyun.cc.qiniudn.com/folder/file.jpg 来访问了。

也就是说,我们只需将 WordPress 输出的内容中,所有的 http://piaoyun.cc/ 域名替换为 http://piaoyun.qiniudn.com/ 就能实现 CDN 加速。(仅作举例,只替换域名是错误的)

第三步:添加 WordPress 代码

在 WordPress 主题目录下的 functions.php 文件中,加入以下代码实现替换功能:

if ( !is_admin() ) {
	add_action('wp_loaded','piaoyun_ob_start');

	function piaoyun_ob_start() {
		ob_start('piaoyun_qiniu_cdn_replace');
	}

	function piaoyun_qiniu_cdn_replace($html) {
		return str_replace('[这里填写博客路径]', '[这里填写七牛空间路径]', $html);
	}
}

以飘云的上传目录 wp-content/uploads/ 文件夹为例,路径就应该替换为如下代码:

return str_replace('http://piaoyun.cc/wp-content/uploads/', 'http://piaoyun.qiniudn.com/wp-content/uploads/', $html);

如果你需要更具体的范围控制(多目录、指定文件类型),可使用以下代码替换上面的 piaoyun_qiniu_cdn_replace 部分:

//修改自七牛镜像存储 WordPress 插件
function piaoyun_qiniu_cdn_replace($html){
	$local_host = 'http://piaoyun.cc'; //博客域名
	$qiniu_host = 'http://piaoyun.qiniudn.com'; //七牛域名
	$cdn_exts   = 'js|css|png|jpg|jpeg|gif|ico'; //扩展名(使用|分隔)
	$cdn_dirs   = 'wp-content|wp-includes'; //目录(使用|分隔)

	$cdn_dirs   = str_replace('-', '\-', $cdn_dirs);

	if ($cdn_dirs) {
		$regex	=  '/' . str_replace('/', '\/', $local_host) . '\/((' . $cdn_dirs . ')\/[^\s\?\\\'\"\;\>\<]{1,}.(' . $cdn_exts . '))([\"\\\'\s\?]{1})/';
		$html =  preg_replace($regex, $qiniu_host . '/$1$4', $html);
	} else {
		$regex	= '/' . str_replace('/', '\/', $local_host) . '\/([^\s\?\\\'\"\;\>\<]{1,}.(' . $cdn_exts . '))([\"\\\'\s\?]{1})/';
		$html =  preg_replace($regex, $qiniu_host . '/$1$3', $html);
	}
	return $html;
}

 大功告成!

简单的3步,就能让你的 WordPress 实现 CDN 加速。当然,如果你的需求还包括加速远程图片或刷新缓存等,那么还是老老实实安装七牛镜像存储 WordPress 插件吧。

因为开启 Gzip 压缩会消耗额外的 CPU 资源,这个可以视自己的VPS或者服务器的资源情况来看,是否需要开启,开启的步骤很简单,只需修改 Apache 的配置文件并重启一下 Apache 即可。

在开启 Gzip 之前,需先确认 Apache 的配置文件中有没有加载 mod_deflate 和 mod_headers 模块。
LAMP一键安装脚本的 Apache 配置文件路径是:/usr/local/apache/conf/httpd.conf

打开此文件查找如下两行代码:

LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so

前面没有#符号即为正常的,若是有#符号则表示被注释掉了,删除前面的#符号即可。

在 Apache 配置文件 /usr/local/apache/conf/httpd.conf 的最后添加:

<IfModule deflate_module>
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc|avi|mov|mp3|rm)$ no-gzip dont-vary
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

注解:
IfModule deflate_module 是判断如果 deflate_module 模块加载的话,执行里面的配置。
SetOutputFilter DEFLATE 是设置输出为 deflate 压缩算法。
SetEnvIfNoCase Request_URI 是排除一些常见的图片,影音,文档等类型的后缀,不压缩。
AddOutputFilterByType DEFLATE 是对常见的文本类型,如html,txt,xml,css,js做压缩处理。

保存以上修改好的配置文件,重启 Apache 即可。

service httpd restart

或者

/etc/init.d/httpd restart