htaccess文件记录
2017-01-18 00:00
357 查看
摘要: 记性不好,老是忘掉,做个记录。
htaccess 探秘
1. 验证是否支持
在目录下新建一个
![](http://images.cnitblog.com/blog/653392/201408/281019115169530.png)
转载请注明: http://www.cnblogs.com/ganiks/
![](http://images.cnitblog.com/blog/653392/201408/281019276418557.png)
通过Allow,Deny参数,Apache首先找到并应用Allow命令,然后应用Deny命令,以阻止所有访问。
通过Deny,Allow参数,Apache首先找到并应用Deny命令,然后应用Allow命令,以允许所有访问。
假设本地的IP为
本地访问成功,非本地IP访问
![](http://images.cnitblog.com/blog/653392/201408/281019494385816.png)
![](http://images.cnitblog.com/blog/653392/201408/281020012986138.png)
![](http://images.cnitblog.com/blog/653392/201408/281020080326029.png)
Files之后的波浪线用于开启“正则表达式”分析。请注意,这是个过时的用法,Apache更推荐使用指令[3]
正则表达式必须在双引号之间,有关htaccess的正则表达式用法,请查阅本站《.htaccess正则表达式》一文。
双引号中的“管道符”(|)用于将两种文件类型(.log和.exe)分开,相当于逻辑“或”
Order命令必须嵌在Files节(Section)中,否则将会应用到所有文件
Satisfy All表示必须同时满足主机级别(Allow/Denay)和用户级别(Require)的限制,All是默认值,该行可以省略。
这3种设置分别对应下面3个图:
![](http://images.cnitblog.com/blog/653392/201408/281020210638510.png)
![](http://images.cnitblog.com/blog/653392/201408/281020281885987.png)
![](http://images.cnitblog.com/blog/653392/201408/281020343137292.png)
![](http://images.cnitblog.com/blog/653392/201408/281020571109723.png)
![](http://images.cnitblog.com/blog/653392/201408/281020488766573.png)
http://corz.org/public/images/demo/
http://corz.org/server/resources/file_view.htaccess.txt?raw=true
1. 准备开始:
2. 利用
2.1 将
[NC] No Case(不区分大小写): 对客户端请求的URL不区分大小写
如果通过.htm进入,浏览器地址栏显示的是.htm扩展名,但服务器上实际执行的是.php
必须保证服务器上有对应的.php,否则会404
浏览器和搜索引擎可以同时通过.htm和.php访问网页
![](http://images.cnitblog.com/blog/653392/201408/281021121888563.png)
test.htm
this is .htm
test.php
this is .php
注意事项:
该RewriteRule能够将.htm静态页面重定向到.php动态页面
如果通过.htm进入,浏览器地址栏会自动转为.php,这也是重定向的本质
必须保证服务器上有对应的.php,否则会404
浏览器和搜索引擎可以同时通过.htm和.php访问网页
如果该目录上存在.htm,将被忽略
RewriteBase定义了重写基准目录。
例如,如果你将虚拟站点设置在/var/www目录下,删除这行将会导致重定向到http://yourdomain.com/var/www/1.php。显然这是找不到的,而且你也不会希望用户看见你的服务器的目录结构。
再举个例子,如果RewriteBase /base/,那么将会重定向到http://yourdomain.com/base/1.php。
对于重写基准目录,我们还可以通过将$1.php变成/$1.php实现直接变换,这时就可以将RewriteBase省略。
字母R表示临时重定向,相当于[R=302,NC]。关于重定向代码,请参考本站《HTTP协议重定向编码》
字母L表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则。
这个规则告诉浏览器和搜索引擎,网站地址发生了永久性变更,用户的URL请求将会被发送给新的域名(主机)处理。
由于是重定向到新的主机地址,RewriteBase也就没有出现的必要了。
通过重定向,搜索引擎意识到页面被移动了,从而更新搜索引擎索引,将原来失效的链接从搜索结果中移除
临时重定向(R=302)和永久重定向(R=301)都是亲搜索引擎的,是SEO的重要技术
URL重写用于将页面映射到本站另一页面,若重写到另一网络主机(域名),则按重定向处理
若访问
则会执行该页面:
3. 改写查询字符串
查询字符串是指URL请求中“问号”后面的部分。比如,http://mysite/grab?foo=bar 中粗体部分就是查询字符串,其中变量名是foo,值是bar。
这里通过 QSA , 将简单的链接
将会把请求
如果没有 QSA标志,将会映射到
如果没有用到小括号正则,就不需要QSA,像《长短地址转换》中一样
小括号正则表达式可以截取查询字符串中的内容,但是如果没有开启QSA标志,那么
该规则将访问请求http://mysite/grab?foo=bar 转换为 http://mysite/page.php?bar=bar
RewriteCond用于捕获查询字符串(QUERY_STRING)中变量foo的值,并存储在%1中
QUERY_STRING是Apache定义的“变量=值”向量(数组)
会把 /grab/foobar.zip?level=5&foo=bar 映射到 /bar/index.php?file=foobar.zip&level=5&foo=bar
转换后根目录是bar目录
foobar.zip?level=5中的“问号”变成了foobar.zip&level=5中的“与”符号
4. 利用
我们在第一篇.htaccess基础中提到了很多有用的访问控制方法,其实通过Rewrite也能实现类似的功能,而且可以更强大!
该规则将仅允许用户请求.css, .js类型的文件,还有special.zip文件
RewriteRule 后面指定了限制规则:映射到/char/目录下处理
RewriteCond 后面的“感叹号”(!)起到了“否定”作用,它表明,对不满足后面正则表达式者应用RewriteRule规则,也就是对当前类型的文件将不应用规则
RewriteCond 之间是以逻辑“与”连接的,也就是只有当三个条件都不满足时才执行RewriteRule
该规则也会限制访问.htm, .jpg等格式
该规则不可以放在虚拟站点根目录(/)下,否则会死循环
如果是二级目录,如/test/,那么传入RewriteCond的参数是以/test/开始的,因此从(.+)获得的文件名也含有/test/,读者必须对此多加小心
要想仅获得文件名,可以将(.+)替换成([^/]+),并且去掉符号^,如下所示:
如果你的服务器提供某些资源的下载,那么你就必须多加小心诸如“迅雷”等下载软件,因为它们可能把你网站资源吸干,并且影响你的正常访客访问。为此,我们可以利用Rewrite限制某些UA的访问:
该规则限制“迅雷”客户端下载资源,并将下载文件重置到abuse.txt
HTTP_USER_AGENT是Apache的内置变量
2.0.50727是迅雷User-agent的特征字符串
RewriteRule后面的“点”表示“任意URI”,也就是不管请求的是什么,都输出abuse.txt
通常,我们不会仅限制一个UA。利用[OR]即可实现对多个UA作出统一处理:
.htaccess的Rewrite功能可以提供非常简单、有效的方法阻止这种可耻行为:
简单解释一下该规则的功能:
除本站以外其他网站都不得引用本站图片,具体可以理解为
如果引用站点为“空”或者是“本站”,或者,所引用对象是“hotlink.png”,那么就允许访问
再次提醒,RewriteCond之间默认的逻辑连接词是逻辑“与”
这里的难点是理解逻辑转换,即德·摩根定律
转载请注明: http://www.cnblogs.com/ganiks/
作者:ganiks
出处:http://www.cnblogs.com/ganiks/
本作品由 Ganiks 创作, 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问,请给我留言。
htaccess 探秘
.htaccess访问控制(Allow/Deny)
1. 验证是否支持.htaccess
在目录下新建一个.htaccess文件,随笔输入一串字符(毫无意义),看看什么反应,如果是500错误,说明目前环境是支持
.htaccess的
fjdklsaj
![](http://images.cnitblog.com/blog/653392/201408/281019115169530.png)
转载请注明: http://www.cnblogs.com/ganiks/
2. deny from all
# no one gets in here! deny from all
![](http://images.cnitblog.com/blog/653392/201408/281019276418557.png)
3. Order命令
Order命令是一个难点,也是配置apache的基础,它决定了Apache处理访问规则的顺序。通过Allow,Deny参数,Apache首先找到并应用Allow命令,然后应用Deny命令,以阻止所有访问。
通过Deny,Allow参数,Apache首先找到并应用Deny命令,然后应用Allow命令,以允许所有访问。
假设本地的IP为
192.168.4.126
Order Deny,Allow Deny from All Allow from 192.168.4.126
本地访问成功,非本地IP访问
403Forbidden
4. 利用.htaccess过滤域名或网络主机(Allow/Deny)
下例可以限制所有含有“domain.com”的网络主机访问网站:Order Allow,Deny Allow from all Deny from .*domain\.com.*
5. 禁止访问指定文件
Order Deny,Allow Deny from All Allow from 192.168.4.126
<Files favicon.ico>
order allow,deny
deny from all
</Files>
![](http://images.cnitblog.com/blog/653392/201408/281019494385816.png)
6. 禁止访问指定类型的文件
Order Deny,Allow Deny from All Allow from 192.168.4.126
<FilesMatch ".(txt|ico)$">
order allow,deny
deny from all
</FilesMatch>
![](http://images.cnitblog.com/blog/653392/201408/281020012986138.png)
![](http://images.cnitblog.com/blog/653392/201408/281020080326029.png)
Files之后的波浪线用于开启“正则表达式”分析。请注意,这是个过时的用法,Apache更推荐使用指令[3]
正则表达式必须在双引号之间,有关htaccess的正则表达式用法,请查阅本站《.htaccess正则表达式》一文。
双引号中的“管道符”(|)用于将两种文件类型(.log和.exe)分开,相当于逻辑“或”
Order命令必须嵌在Files节(Section)中,否则将会应用到所有文件
Satisfy All表示必须同时满足主机级别(Allow/Denay)和用户级别(Require)的限制,All是默认值,该行可以省略。
利用.htaccess进行密码保护与验证
暂不研究目录浏览与主页
1. 启用和禁用目录浏览
Options All -Indexes IndexIgnore * Options All +Indexes
这3种设置分别对应下面3个图:
![](http://images.cnitblog.com/blog/653392/201408/281020210638510.png)
![](http://images.cnitblog.com/blog/653392/201408/281020281885987.png)
![](http://images.cnitblog.com/blog/653392/201408/281020343137292.png)
2. 禁用浏览某些文件
![](http://images.cnitblog.com/blog/653392/201408/281020571109723.png)
IndexIgnore *.php *.txt~ Copy*
![](http://images.cnitblog.com/blog/653392/201408/281020488766573.png)
3. 自定义目录浏览页面的style
<IfModule mod_autoindex.c> IndexOptions FancyIndexing </ifModule>
http://corz.org/public/images/demo/
http://corz.org/server/resources/file_view.htaccess.txt?raw=true
4. 配置目录主页文件
DirectoryIndex index.html index.php index.htm
5. 配置错误页面
# custom error documents ErrorDocument 401 /err/401.php ErrorDocument 403 /err/403.php ErrorDocument 404 /err/404.php ErrorDocument 500 /err/500.php
URL重写与URL重定向
一、准备开始:mod_rewrite 二、利用.htaccess实现URL重写(rewrite)与URL重定向(redirect) 将.htm页面映射到.php 临时重定向(R=302)与永久重定向(R=301) 为什么要用重定向?——重定向和URL重写的区别 长短地址转换 去掉www 加上www 支持多域名访问 三、改写查询字符串QUERY_STRING 利用QSA转换查询字符串QUERY_STRING 利用RewriteCond改写查询字符串QUERY_STRING QSA与RewriteCond双剑齐发 剥离查询字符串 四、利用RewriteCond和RewriteRule进行访问控制 文件访问控制 用.htaccess阻止User-agent 用.htaccess阻止盗链(hot-linking) References
1. 准备开始: mod_rewrite
sudo a2enmod rewrite
<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine on # More rules below ... </IfModule>
FollowSymlinks必须启用,这是 rewrite 引擎的安全需求
mod_rewrite会处理所有的提交给Apache 的URL请求, 并与之后的规则进行匹配
2. 利用 .htaccess
实现URL重写和URL重定向
2.1 将.htm
页面映射到.php
页面
<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine on RewriteRule ^(.*)\.htm$ $1.php [NC] </IfModule>
[NC] No Case(不区分大小写): 对客户端请求的URL不区分大小写
如果通过.htm进入,浏览器地址栏显示的是.htm扩展名,但服务器上实际执行的是.php
必须保证服务器上有对应的.php,否则会404
浏览器和搜索引擎可以同时通过.htm和.php访问网页
![](http://images.cnitblog.com/blog/653392/201408/281021121888563.png)
test.htm
this is .htm
test.php
this is .php
2.2 临时重定向(R=302)与永久重定向(R=301)
<IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule ^(.*)\.htm$ $1.php [R,NC,L] </IfModule>
注意事项:
该RewriteRule能够将.htm静态页面重定向到.php动态页面
如果通过.htm进入,浏览器地址栏会自动转为.php,这也是重定向的本质
必须保证服务器上有对应的.php,否则会404
浏览器和搜索引擎可以同时通过.htm和.php访问网页
如果该目录上存在.htm,将被忽略
RewriteBase定义了重写基准目录。
例如,如果你将虚拟站点设置在/var/www目录下,删除这行将会导致重定向到http://yourdomain.com/var/www/1.php。显然这是找不到的,而且你也不会希望用户看见你的服务器的目录结构。
再举个例子,如果RewriteBase /base/,那么将会重定向到http://yourdomain.com/base/1.php。
对于重写基准目录,我们还可以通过将$1.php变成/$1.php实现直接变换,这时就可以将RewriteBase省略。
字母R表示临时重定向,相当于[R=302,NC]。关于重定向代码,请参考本站《HTTP协议重定向编码》
字母L表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则。
<IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule ^(.*)$ http://newdomain/$1 [R=301,NC,L] </IfModule>
这个规则告诉浏览器和搜索引擎,网站地址发生了永久性变更,用户的URL请求将会被发送给新的域名(主机)处理。
由于是重定向到新的主机地址,RewriteBase也就没有出现的必要了。
2.3 为什么要重定向——重定向和URL重写的区别
通过重定向,浏览器知道页面位置发生变化,从而改变地址栏显示的地址通过重定向,搜索引擎意识到页面被移动了,从而更新搜索引擎索引,将原来失效的链接从搜索结果中移除
临时重定向(R=302)和永久重定向(R=301)都是亲搜索引擎的,是SEO的重要技术
URL重写用于将页面映射到本站另一页面,若重写到另一网络主机(域名),则按重定向处理
2.4 长短地址转换
利用URL重写,我们可以很方便地实现长短地址的转换,但是用重定向就不合适了。RewriteEngine On RewriteRule ^grab /public/files/download/download.php
若访问
http://mysite/grab?file=my.zip
则会执行该页面:
http://mysite/public/files/download/download.php?file=my.zip
2.5 去掉 www
<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L] </IFModule>
2.6 加上 www
<IfModule mod_rewrite.c> Options +FollowSymlinks RewriteEngine on RewriteCond %{HTTP_HOST} ^(.*)$ RewriteRule (.*) http://www\.%1/$1 [R=301,L] </IFModule>
2.7 支持多域名访问
如果你不凑巧买到了不支持多域名的主机,那么.htaccess或许可以帮助你。现在假设你有域名domain-one.com和domain- two.com,并且在服务器根目录有对应文件夹one和two,那么通过下面的改写就能让Apache同时接受者两个域名的请求:#two domains served from one root.. RewriteCond %{HTTP_HOST} domain-one.com RewriteCond %{REQUEST_URI} !^/one RewriteRule ^(.*)$ /one/$1 [L] RewriteCond %{HTTP_HOST} domain-two.com RewriteCond %{REQUEST_URI} !^/two RewriteRule ^(.*)$ /two/$1 [L]
3. 改写查询字符串 QUERY_STRING
查询字符串是指URL请求中“问号”后面的部分。比如,http://mysite/grab?foo=bar 中粗体部分就是查询字符串,其中变量名是foo,值是bar。3.1 利用 QSA 转换查询字符串 QUERY_STRING
QSA(Query String Appending) 用于在 URI中截取查询字符串, 这个截取操作室通过小括号正则实现的RewriteEngine On RewriteRule /pages/(.+) /page.php?page=$1 [QSA] RewriteRule ^/([^/]+)/([^/]+)/? /index.php?first-var=$1&second-var=$2 [QSA]
这里通过 QSA , 将简单的链接
/simple/flat/link/映射到
server-side.php?first-val=flat&second-var=link
将会把请求
/pages/123?one=two映射到
/page.php?page=123&one=two
如果没有 QSA标志,将会映射到
/page.php?page=123
如果没有用到小括号正则,就不需要QSA,像《长短地址转换》中一样
小括号正则表达式可以截取查询字符串中的内容,但是如果没有开启QSA标志,那么
/page.php?page=$1中 问号之后的部分将会剥离丢弃。
3.2 利用RewriteCond改写查询字符串QUERY_STRING
RewriteEngine On RewriteCond %{QUERY_STRING} foo=(.*) RewriteRule ^grab(.*) /page.php?bar=%1
该规则将访问请求http://mysite/grab?foo=bar 转换为 http://mysite/page.php?bar=bar
RewriteCond用于捕获查询字符串(QUERY_STRING)中变量foo的值,并存储在%1中
QUERY_STRING是Apache定义的“变量=值”向量(数组)
3.3 QSA与RewriteCond双剑齐发
RewriteEngine On RewriteCond %{QUERY_STRING} foo=(.+) RewriteRule ^grab/(.*) /%1/index.php?file=$1 [QSA]
会把 /grab/foobar.zip?level=5&foo=bar 映射到 /bar/index.php?file=foobar.zip&level=5&foo=bar
转换后根目录是bar目录
foobar.zip?level=5中的“问号”变成了foobar.zip&level=5中的“与”符号
3.4 剥离查询字符串
只需在要开始剥离的链接后面加个“问号”,并且不要启用QSA标志,就可剥离查询字符串RewriteEngine On # Whatever QS is RewriteCond %{QUERY_STRING} . # I don't want it with Question mark RewriteRule foo.php(.*) /foo.php? [L]
4. 利用 RewriteCond
和 RewriteRule
进行访问控制
我们在第一篇.htaccess基础中提到了很多有用的访问控制方法,其实通过Rewrite也能实现类似的功能,而且可以更强大!4.1 文件访问控制
之前利用Order、Files及FilesMatch命令实现的访问控制可以满足大部分要求,但是当用户被拒绝时,他们看到的是硕大的“403 Forbidden”,如果你不想伤害用户的感情,就需要显示一些别的东西,通过Rewrite就可以实现这个特性:RewriteEngine On RewriteCond %{REQUEST_FILENAME} !^(.+)\.css$ RewriteCond %{REQUEST_FILENAME} !^(.+)\.js$ RewriteCond %{REQUEST_FILENAME} !special.zip$ RewriteRule ^(.+)$ /chat/ [NC]
该规则将仅允许用户请求.css, .js类型的文件,还有special.zip文件
RewriteRule 后面指定了限制规则:映射到/char/目录下处理
RewriteCond 后面的“感叹号”(!)起到了“否定”作用,它表明,对不满足后面正则表达式者应用RewriteRule规则,也就是对当前类型的文件将不应用规则
RewriteCond 之间是以逻辑“与”连接的,也就是只有当三个条件都不满足时才执行RewriteRule
该规则也会限制访问.htm, .jpg等格式
该规则不可以放在虚拟站点根目录(/)下,否则会死循环
如果是二级目录,如/test/,那么传入RewriteCond的参数是以/test/开始的,因此从(.+)获得的文件名也含有/test/,读者必须对此多加小心
要想仅获得文件名,可以将(.+)替换成([^/]+),并且去掉符号^,如下所示:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !([^/]+)\.css$ RewriteCond %{REQUEST_FILENAME} !([^/]+)\.js$ RewriteRule ^(.+)$ /chat/ [NC]
4.2 用.htaccess阻止User-agent
什么是User-agent?User-agent用于浏览器向服务器“自报家门”,更确切的说是所有HTTP客户端都得用User-agent向 服务器“自报家门”,以便服务器对不同的客户端作出不同响应。比如,某站点可能需要对浏览器、搜索引擎crawl还有各类下载工具作出不同的响应。服务器 就是通过所谓的User-agent进行区分的。如果你的服务器提供某些资源的下载,那么你就必须多加小心诸如“迅雷”等下载软件,因为它们可能把你网站资源吸干,并且影响你的正常访客访问。为此,我们可以利用Rewrite限制某些UA的访问:
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} 2.0.50727 [NC] RewriteRule . abuse.txt [L]
该规则限制“迅雷”客户端下载资源,并将下载文件重置到abuse.txt
HTTP_USER_AGENT是Apache的内置变量
2.0.50727是迅雷User-agent的特征字符串
RewriteRule后面的“点”表示“任意URI”,也就是不管请求的是什么,都输出abuse.txt
通常,我们不会仅限制一个UA。利用[OR]即可实现对多个UA作出统一处理:
RewriteEngine on RewriteCond %{HTTP_USER_AGENT} 2.0.50727 [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [NC,OR] # etc.. RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [NC] RewriteRule . abuse.txt [L]
4.3 用.htaccess阻止盗链(hot-linking)
盗链,特别是图片,是非常可耻的!哪怕将图片复制到自己服务器上,也比盗用他人的图片链接来得光彩!(吐糟完毕).htaccess的Rewrite功能可以提供非常简单、有效的方法阻止这种可耻行为:
RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?lesca\.me/ [NC] RewriteCond %{REQUEST_URI} !hotlink\.png [NC] RewriteRule .*\.(gif|jpg|png)$ /hotlink.png [NC]
简单解释一下该规则的功能:
除本站以外其他网站都不得引用本站图片,具体可以理解为
如果引用站点为“空”或者是“本站”,或者,所引用对象是“hotlink.png”,那么就允许访问
再次提醒,RewriteCond之间默认的逻辑连接词是逻辑“与”
这里的难点是理解逻辑转换,即德·摩根定律
转载请注明: http://www.cnblogs.com/ganiks/
htaccess正则表达式
# 位于行首时表示注释。 [F] Forbidden(禁止): 命令服务器返回 403 Forbidden错误给用户浏览器 [L] Last rule(最后一条规则): 告诉服务器在本条规则执行完后停止重写URL Next(下一条规则): 告诉服务器继续重写,指导所有重写指令都执行过 [G] Gone(丢失): 命令服务器返回410 GONE(no longer exists)错误消息 [P] Proxy(代理): 告诉服务器通过mod_proxy模块处理用户请求 [C] Chain(捆绑): 告诉服务器将当前的规则和前面的规则进行捆绑 [R] Redirect(重定向): 命令服务器发出重定向消息,以便用户浏览器发出rewritten/modified(重写/修改)URL的请求 [NC] No Case(不区分大小写): 对客户端请求的URL不区分大小写 [PT] Pass Through(放行): 让mod_rewrite模块将重写的URL传回给Apache做进一步处理 [OR] Or(逻辑或): 用逻辑“或”将两个表达式连接在一起,如果结果为“真”,则会应用后继的相关规则 [NE] No Escape(禁用转义): 命令服务器在输出时禁用转义字符 [NS] No Subrequest(禁用子请求): 如果存在内部子请求,则跳过当前命令 [QSA] Append Query String(追加查询字符串): 命令服务器在URL末尾追加查询字符串 [S=x] Skip(跳过): 如果满足某指定的条件,则跳过后面第x调规则 [E=variable:value] Environmental Variable(环境变量): 命令服务器将值value赋给变量variable [T=MIME-type] Mime Type(MIME类型): 声明目标资源所属的MIME类型 [] 匹配一个字符集合,例如[xyz]可以匹配x, y或者z []+ 例如[xyz]+会以任何顺序、次数匹配x,y,z的出现 [^] 字符^表示字符集的补集。[^xyz]将匹配没有x,y或者z的字符串 [a-z] 连字符(-)表示匹配从字母a到字母z的所有字符串 a{n} 指定字母a出现的次数为n次,满足该条件时匹配。例如x{3}仅与xxx匹配 a{n,} 指定字母a出现的次数至少为n次,例如x{3,}可以与xxx或者xxxx等匹配 a{n,m} 指定a出现的次数至少为n到m次。 () 用于将正则表达式分组,满足第一组正则表达式的字符串会被存储在变量$1中,以此类推。如果括号中的不是正则表达式,例如(perishable)?press 将能够匹配有或者没有perishable前缀的press ^ 位于行首。注意:和中括号中的[^]意义不同。 $ 位于行末 ? 例如 monzas? 会匹配 monza 或者 monzas,而 mon(za)? 会匹配 mon 或者 monza。又如 x? 会匹配“空字符” 或者 一个x ! 逻辑非。例如“!string” 将会匹配除了“string”以外的所有字符串 . 表示任意字符串 - 命令Apache“不要”重写URL,例如“xxx.domain.com.* – [F]” + 匹配至少一个任意字符,例如G+匹配以G开头、并且后面至少有一个字符的字符串 * 匹配零个或多个字符,例如“.*”匹配任意字符串 | 逻辑“或”,与[OR]不同的是,它只匹配字符串,例如(x|y)匹配x或者y \ 转义字符。可以转义左括号( 尖字符^ 美元符号$ 感叹号! 点. 星号* 管道符号| 右括号) 等 \. 转义为点字符(点字符在正则表达式中可以匹配任意字符) /* 零个或多个正斜杠 .* 零个或多个任意字符(即,匹配任意字符串,包括空字符) ^$ 匹配“空字符”、“空行” ^.*$ 匹配任意字符串(仅限一行) [^/.] 匹配既非“正斜杠”也不是“点”的任意字符 [^/.]+ 匹配第一个字符既非“正斜杠”也不是“点”,后继字符可以是“正斜杠”或者“点”的字符串 http:// 匹配“http://” ^domain.* 匹配以“domain”开始的字符串 ^domain\.com$ 仅匹配“domain.com” -d 测试字符串是否是已存在的目录 -f 测试字符串是否是已存在的文件 -s 测试字符串所指文件是否有“非零”值 HTTP协议重定向编码 301 – Moved Permanently 302 – Moved Temporarily 403 – Forbidden 404 – Not Found 410 – Gone
作者:ganiks
出处:http://www.cnblogs.com/ganiks/
本作品由 Ganiks 创作, 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问,请给我留言。
相关文章推荐
- [问题记录]Mac下.htaccess文件引起500错误
- .htaccess 文件的应用
- 以追加模式打开记录文件
- htaccess文件使用大全
- Delphi中使用资源文件的一点记录
- Apache指南: .htaccess文件使用手册
- c语言库函数syslog--将信息记录至系统日志文件
- 简单利用 log4net 向文件中写入日志记录
- 关于在不同程序间拖放文件的实践记录
- [记录]编译器错误信息: CS0016: 未能写入输出文件
- 遍历所有当前及下级目录,并记录为XML文件
- MASM-文件记录操作
- 配置文件记录(1)
- htaccess文件使用大全
- tomcat中的catalina.out日志文件按日分开进行记录
- DotNetNuke Skinning Whitepaper 翻译记录(文件组织部分)
- LMHOSTS文件里如果记录中带有#PRE,则这些记录一开机就会被装入NetBios cache.
- [新]可精确到1毫秒的用以在记录文件中写入自定义的调试信息(主要是时间)的组件
- 资料库字段存储文件记录的方式
- 采用flash调用外部文件的一点记录