RewriteCond 指令是用来定义触发重写的条件的。即在一个RewriteRule指令之前可以有一个或多个RewriteCond指令。条件之后的重写规则仅在当前URI 与Pattern匹配并且满足此处的条件时才会起作用。
RewriteCond指令的语法如下:
[code]
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /homepage.max.html [L]
[/code]
%{HTTP_USER_AGENT} 此时指的是用户的浏览器标识,上面的转写语句的意思是:当用户的浏览器标识为Mozilla,访问主页的时候,跳转到homepage.max.html页。类似%{HTTP_USER_AGENT}这样的的变量有很多,常用的有%{HTTP_HOST}, %{QUERY_STRING}等等。
注:RewriteCond的第二个参数是一个perl兼容的正则表达式,但是还有若干增补:
1.可以在表达式的开头使用’!'(惊叹号)来指定不匹配。
[code]
RewriteCond %{HTTP_HOST} !^smartwei\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://smartwei.com/$1 [L,R]
[/code]
将站内所有不适以smartwei.com开头的链接都转化为以http://smartwei.com/开头的形式。
2.除了正则表达式的标准用法,还有下列用法
- ‘<CondPattern’(词典顺序的小于)
将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString小于CondPattern则为真。
- ‘>CondPattern’(词典顺序的大于)
将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString大于CondPattern则为真。
- ‘=CondPattern’(词典顺序的等于)
将CondPattern视为纯字符串,与TestString按词典顺序进行比较。如果TestString等于CondPattern(两个字符串逐个字符地完全相等)则为真。如果CondPattern是”"(两个双引号),则TestString将与空字符串进行比较。
- ‘-d’(目录)
将TestString视为一个路径名并测试它是否为一个存在的目录。
- ‘-f’(常规文件)
将TestString视为一个路径名并测试它是否为一个存在的常规文件。
- ‘-s’(非空的常规文件)
将TestString视为一个路径名并测试它是否为一个存在的、尺寸大于0的常规文件。
- ‘-l’(符号连接)
将TestString视为一个路径名并测试它是否为一个存在的符号连接。
- ‘-x’(可执行)
将TestString视为一个路径名并测试它是否为一个存在的、具有可执行权限的文件。该权限由操作系统检测。
- ‘-F’(对子请求存在的文件)
检查TestString是否为一个有效的文件,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
- ‘-U’(对子请求存在的URL)
检查TestString是否为一个有效的URL,而且可以在服务器当前的访问控制配置下被访问。它使用一个内部子请求来做检查,由于会降低服务器的性能,所以请谨慎使用!
3.还可以追加特殊的标记[flags]作为RewriteCond指令的第三个参数
[flags]是一个以逗号分隔的以下标记的列表:
- ‘nocase|NC’(忽略大小写)
它使测试忽略大小写,扩展后的TestString和CondPattern中’A-Z’ 和’a-z’是没有区别的。此标记仅用于TestString和CondPattern的比较,而对文件系统和子请求的检查不起作用。
- ‘ornext|OR’(或下一条件)
它以OR方式组合若干规则的条件,而不是隐含的AND。典型的例子如下:
[code]
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
RewriteCond %{REMOTE_HOST} ^host3.*
RewriteRule ... 针对这3个主机的规则集 ...
[/code]
如果不用这个标记,你就必须要书写三次条件/规则对。
作者: 石巍
原载: 金步国-Apache模块 mod_rewrite
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。
本文链接: http://www.smartwei.com/url-write-rewritecond.html
通俗的讲,作业控制命令是用来控制一个一个任务的。
1. 我想把updatedb命令(用于重新建立整盘索引的命令)放在后台运行。因为我不想眼睁睁的看着机器建立索引,我还想编会儿程序呢:
# updatedb & (输入)
[1] 23336 (输出)
注释:在所要执行的命令后面加上空格,再加上&符号即可实现后台执行。所返回的[1]表示这是第一个你放到后台的任务。23336是这个任务的进程号。
2. 我执行updatedb时忘了加&了,这下我怎么办?有办法:
按键盘上的ctrl-z组合键,可以将前台任务扔到后台!但务必注意的是,用ctrl-z的话,这个任务到了后台可是stopped的状态。(你都无情的把它ctrl-z到后台了,它怎么可能还会任劳任怨的继续在后台工作呢?)
3. 我学会了这招,我把很多程序都放到后台执行了。我想查看一下:
# jobs
[1]+ Running updatedb &
注释:显示出了正在后台运行的任务的列表
4. 我编程结束了。想把刚才的updatedb放回前台看看。
# fg %1
注释:fg中的f就表示front,前台的意思。%1表示是在jobs命令中列出的1号任务。如果是2号任务呢,我猜你知道如何写。
5. 如果你用jobs命令发现有一个显示[stopped]的任务(任务号是2),我想让这个任务继续在后台执行:
# bg %2
注释:stopped的状态通常出现在用户ctrl-z之后。
6. 我想让后台的任务号是3的任务取消:
# kill %3
注释:这样就杀死了任务号为3的后台任务。
如果对作业控制系列的内容比较感兴趣,可以看一下IBM developer works上面的这篇文章,相信对你有帮助。
作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。
本文链接: http://www.smartwei.com/linux-work-control-instruction.html
上两篇文章介绍了使用gzip,bunzip2命令来压缩和解压缩文件,这篇文章说一下zip命令。zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。
1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip:
# zip -r yasuo.zip abc.txt dir1
2.我下载了一个yasuo.zip文件,想解压缩:
# unzip yasuo.zip
3.我当前目录下有abc1.zip,abc2.zip和abc3.zip,我想一起解压缩它们:
# unzip abc\?.zip
注释:?表示一个字符,如果用*表示任意多个字符。
4.我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么:
# unzip -v large.zip
附加: yegle指出了:“列出压缩文件中的文件列表可以用zless这个命令~”。 (linux大棚进行了测试,得出了:“zless对直接用gz压缩的文件有用。如果是先tar打包再gz压缩,用zless输出的有乱码”)
5.我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否下载完全了
# unzip -t large.zip
6.我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录:
# unzip -j music.zip
作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。
本文链接: http://www.smartwei.com/linux-zip-instruction.html
在“之七”中讲到了gzip压缩工具的使用,但并不是所有的linux压缩包都是.tar.gz的(请相信我^_^),你还会发现有一类文件的后缀是.tar.bz2的(这也是真的)。此时,bunzip2命令就派上用场了。
在开始讲解之前,有一点必须要说明,bunzip2和bzip2的关系。如果你在fedora下工作,你会发现bunzip2是bzip2的一个符 号连接。但bunzip2和bzip2的功能却正好相反。bzip2是用来压缩文件的(当然如果使用特殊函数也是可以用来解压,用选项-d可以实现),而 bunzip2是用来解压文件的(相当于bzip2 -d)。类比,还有zip和unzip、gzip和gunzip、compress和uncompress。
下面来看看它的使用:
1.当你下载了一个文件为roc.tar.bz2时,该怎么解压它呢
# tar -xjvf roc.tar.bz2
注释:j选项表示采用bunzip2工具。(yegle说可以省略j,即不特殊指定压缩工具,只用-xvf。这是也正确的^_^)
注:yegle在linux大棚中做了说明:“关于省略j参数,是某个版本之后的tar才支持的,有的老版本的tar不支持,比如software ftp上的……”
2. 我有一个文件abc.txt,我想用bunzip2压缩工具进行压缩!
# bzip2 abc.txt
注释:压缩后会得到一个压缩文件abc.txt.bz2,同时原abc.txt会被删除。(这点很重要哦,linux考试会问到这一点)
3. 如果有一个文件abc.txt.bz2,想解压缩:
# bunzip2 abc.txt.bz2
注释:解压后会得到abc.txt,而原abc.txt.bz2会被删除。
4. 如果我想压缩abc1.txt,abc2.txt,abc3.txt三个文件,还有dir1和dir2目录,共5个部分,一起压缩到five.bz2中:
# bzip five.bz2 abc1.txt abc2.txt abc3.txt dir1 dir2
5. 如果有abc1.txt.bz2和abc2.txt.bz2两个文件,我想用一个命令把两个文件分别解压为abc1.txt和abc2.txt:
# bunzip2 abc1.txt.bz2 abc2.txt.bz2
6. 如果有abc1.txt和abc2.txt两个文件,我想用一个命令把两个文件分别压缩为abc1.txt.bz2和abc2.txt.bz2:
# bzip2 abc1.txt abc2.txt
作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。
本文链接: http://www.smartwei.com/linux-bunzip2-instruction.html
转移到linux之后的一大痛苦就是压缩和解压缩,今天的主题是“压缩和解压工具gzip”。
五分钟教会你linux压缩和解压大法~~
1. 下载了一个源码文件abc.tar.gz或abc.tgz(后缀tar.gz和tgz基本没啥区别,相同的还有.taz和.tar.Z)
# tar -xzvf abc.tar.gz 或
# tar -xzvf abc.tgz
注释:tar.gz和tgz是经过归档并由gzip工具压缩之后所得到的压缩包。
x选项表示解压缩
z表示用gzip工具进行解压缩
v表示在解压缩时显示详细信息
f表示指定文件(请注意,这个选项一定要放在各个选项的最后哦~~,也就是要和所指定的文件名挨得最近哦)
2. 遇到一个文件xyz.gz,想解压缩:
# gzip -d xyz.gz
注释:d选项表示解压缩
3. 遇到一个文件edf.tar,想解压缩:(严格的讲tar文件是归档文件,并未被压缩,这里提到的“解压缩”只是将tar文件拆开而已):
# tar -xvf edf.tar
注释:其实这个命令不是压缩命令范畴,只是在这里提一下:)
4. 想将一个文件夹dirabc压缩成.tar.gz的压缩文件:
# tar -czvf dirabc.tar.gz dirabc
5 想查看一下下载的abc.tar.gz压缩文件里包含哪些文件
# tar -ztvf abc.tar.gz
6. 用5的方法查看到abc.tar.gz压缩包,其中包括def/xyz.txt文件等很多文件,但只想提取出xyz.txt这一个文件
# tar -xzvf abc.tar.gz def/xyz.txt
7. 解压abc.tar.gz时我想保留原来被压缩文件的权限(常用于备份)
# tar -xzvpf abc.tar.gz
8. 我想压缩得最快,代价是压缩比最高
# gzip -1 abc.tar
注释:-1也可以换成–fast;-9表示压缩比高,但速度最慢,-9也可以用–best代替。默认的是-6(数字不好记的话,可以这样记:1表示一步到位,往往一步到位的东西追求的是快,而不是精致程度 ^_^)
作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。
本文链接: http://www.smartwei.com/linux-gzip-instruction.html
tr指令从标准输入设备读取数据,经过字符串转译后,输出到标准输出设备。
cat filename |tr u n :用于在屏幕上将filename文件中的u替换为n,而实际文件中未作替换
cat filename | tr -d abc 在屏幕上将filename内容中的所有出现的a或b或c字符删去,并显示出来
cat filename|tr [:lower:] [:upper:] 将文件内容中的小写全部变为大写
类似于[:lower:]的代替符号还有:
[:alnum:] 表示所有的字母和数字
[:alpha:] 表示所有的字母
[:blank:] 表示所有空格
[:digit:] 表示所有数字
[:graph:] 表示所有可打印字符,但不包括空格
[:print:] 表示所有可打印字符,包括空格
作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。
本文链接: http://www.smartwei.com/linux-tr-instruction.html
uname -a 打印所有系统信息
uname -s 打印内核名称
uname -n 打印网络节点主机名
uname -r 打印内核发信版本号
uname –help 获得帮助信息
查看系统版本号的方法还有:
- cat /proc/version
- cat /etc/redhat-release
- cat /etc/issue
作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。
本文链接: http://www.smartwei.com/linux-uname-instruction.html
chkconfig在命令行操作时会经常用到。它可以方便地设置各个系统运行级别启动的服务。这个可要好好掌握,用熟练之后,就可以轻轻松松的管理好你的启动服务了。
1. 想列出系统所有的服务启动情况:
# chkconfig –list
2. 想列出mysqld服务设置情况:
#chkconfig –list mysqld
3. 设定mysqld在等级3和5为开机运行服务:
# chkconfig –level 35 mysqld on
–level 35表示操作只在等级3和5执行
on表示启动,off表示关闭
4. 设定mysqld在各等级为on:
# chkconfig mysqld on
注:各等级”包括2、3、4、5等级
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
4. 如何增加一个服务:
首先,服务脚本必须存放在/etc/ini.d/目录下;
其次,需要用chkconfig –add servicename来在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了。
最后,你就可以上面教的方法修改服务的默认启动等级了。
5. 删除一个服务:
# chkconfig –del servicename
注:Ubuntu 9.10 已经不支持chkconfig命令了
作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。
本文链接: http://www.smartwei.com/linux-chkconfig-instruction.html
du命令:disk usage,顾名思义,是关于目录使用情况的。对了~ 它的作用就是计算目录大小的。
1.想看当前目录下所有目录以及子目录的大小:
# du -h .
“.”代表当前目录下。也可以换成一个明确的路径
-h表示用K、M、G的人性化形式显示
2.只想看当前目录下abc目录的大小,并不想看其他目录以及其子目录:
# du -ch abc | tail -n 1
此种方法需要管道技术来管道du和tail两个命令来实现。
-c表示最后计算出所有所列目录的大小之和
# du -sh abc
-s表示总结的意思,即只列出一个总结的值
# du -h –max-depth=0 abc (注:max前面是两个’-')
–max-depth=n表示只深入到第n层目录,此处设置为0,即表示不深入到子目录。
3.列出abc目录及其子目录下所有目录和文件的大小:
# du -ah abc
-a表示包括目录和文件
4.列出所有abc目录中的目录名不包括xyz字符串的目录的大小:
# du -h –exclude=’*xyz*’
5.想在一个屏幕下列出更多的关于abc目录及子目录大小的信息:
# du -0h abc
-0(杠零)表示每列出一个目录的信息,不换行,而是直接输出下一个目录的信息。
作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。
本文链接: http://www.smartwei.com/linux-du-instruction.html
service命令,顾名思义,就是用于管理Linux操作系统中服务的命令。
1. 声明:这个命令不是在所有的linux发行版本中都有。主要是在redhat、fedora、mandriva和centos中。
2. 此命令位于/sbin目录下,用file命令查看此命令会发现它是一个脚本命令。
3. 分析脚本可知此命令的作用是去/etc/init.d目录下寻找相应的服务,进行开启和关闭等操作。
4. 开启httpd服务器:service httpd start
start可以换成restart表示重新启动,stop表示关闭,reload表示重新载入配置。
5. 关闭mysql服务器:service mysqld stop
6. 强烈建议大家将service命令替换为/etc/init.d/mysqld stop (因为有一些linux的版本不支持service)
作者: 石巍
原载: linux大棚
版权所有,转载时必须以超链接形式注明作者和原始出处及本声明。
本文链接: http://www.smartwei.com/linux-service-instruction.html