.htaccess文件(或者”分布式配置文件”)提供了针对文件夹改变配置的方法。 即。在一个特定的文档文件夹中放置一个包括一个或多个指令的文件, 以作用于此文件夹及其所有子文件夹。

作为用户。所能使用的命令受到限制。管理员能够通过Apache的AllowOverride指令来设置。

概述来说,htaccess文件是Apacheserver中的一个配置文件,它负责相关文件夹下的网页配置。通过htaccess文件。能够帮我们实现:网页301重定向、自己定义404错误页面、改变文件扩展名、同意/阻止特定的用户或者文件夹的訪问、禁止文件夹列表、配置默认文档等功能。

.htaccess 具体解释

.htaccess是什么

启用.htaccess,须要改动httpd.conf。启用AllowOverride,并能够用AllowOverride限制特定命令的使用。

假设须要使用.htaccess以外的其它文件名称,能够用AccessFileName指令来改变。比如,须要使用.config ,则能够在server配置文件里按下面方法配置:AccessFileName .config 。

笼统地说,.htaccess能够帮我们实现包含:文件夹password保护、用户自己主动重定向、自己定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、仅仅同意特定IP地址的用户、禁止文件夹列表,以及使用其它文件作为index文件等一些功能。

工作原理

.htaccess文件(或者”分布式配置文件”)提供了针对每一个文件夹改变配置的方法,即在一个特定的文件夹中放置一个包括指令的文件,当中的指令作用于此文件夹及其全部子文件夹。
说明:
假设须要使用.htaccess以外的其它文件名称,能够用AccessFileName指令来改变。

比如。须要使用.config ,则能够在server配置文件里按下面方法配置:
AccessFileName .config
通常,.htaccess文件使用的配置语法和主配置文件一样。AllowOverride指令按类别决定了.htaccess文件里哪些指令才是有效的。假设一个指令同意在.htaccess中使用,那么在本手冊的说明中,此指令会有一个覆盖项段,当中说明了为使此指令生效而必须在AllowOverride指令中设置的值。

(不)使用.htaccess文件的场合

普通情况下。不应该使用.htaccess文件。除非你对主配置文件没有訪问权限。

有一种非经常见的误解。觉得用户认证仅仅能通过.htaccess文件实现。事实上并非这样。把用户认证写在主配置文件里是全然可行的,并且是一种非常好的方法。

.htaccess文件应该被用在内容提供者须要针对特定文件夹改变server的配置而又没有root权限的情况下。

假设server管理员不愿意频繁改动配置,则能够同意用户通过.htaccess文件自己改动配置,尤其是ISP在同一个机器上执行了多个用户网站,而又希望用户能够自己改变配置的情况下。

尽管如此。一般都应该尽可能地避免使用.htaccess文件。不论什么希望放在.htaccess文件里的配置,都能够放在主配置文件的<Directory>段中,并且更高效。
避免使用.htaccess文件有两个主要原因。
首先是性能。

假设AllowOverride启用了.htaccess文件,则Apache须要在每个文件夹中查找.htaccess文件。因此。不管是否真正用到,启用.htaccess都会导致性能的下降。

另外。对每个请求,都须要读取一次.htaccess文件。
还有,Apache必须在全部上级的文件夹中查找.htaccess文件,以使全部有效的指令都起作用(參见指令的生效),所以,假设请求/www/htdocs/example中的页面,Apache必须查找下面文件:
/.htaccess /www/.htaccess /www/htdocs/.htaccess /www/htdocs/example/.htaccess
总共要訪问4个额外的文件。即使这些文件都不存在。

(注意。这可能只因为同意根文件夹”/”使用.htaccess ,尽管这样的情况并不多。

)

其次是安全。

这样会同意用户自己改动server的配置,这可能会导致某些意想不到的改动。所以请认真考虑是否应当给予用户这种特权。可是,假设给予用户较少的特权而不能满足其须要,则会带来额外的技术支持请求。所以,必须明白地告诉用户已经给予他们的权限。说明AllowOverride设置的值,并引导他们參阅对应的说明。以免日后生出很多麻烦。
注意。在/www/htdocs/example文件夹下的.htaccess文件里放置指令,与在主配置文件里<Directory /www/htdocs/example>段中放置同样指令,是全然等效的。

/www/htdocs/example文件夹下的.htaccess文件的内容:
AddType text/example .exm
httpd.conf文件里摘录的内容:
<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>
可是,把配置放在主配置文件里更加高效,由于仅仅须要在Apache启动时读取一次,而不是在每次文件被请求时都读取。

将AllowOverride设置为none能够全然禁止使用.htaccess文件:
AllowOverride None

指令的作用范围

.htaccess文件里的配置指令作用于.htaccess文件所在的文件夹及其全部子文件夹,可是非常重要的、须要注意的是,其上级文件夹也可能会有.htaccess文件,而指令是按查找顺序依次生效的。所以一个特定文件夹下的.htaccess文件里的指令可能会覆盖其上级文件夹中的.htaccess文件里的指令,即子文件夹中的指令会覆盖父文件夹或者主配置文件里的指令。

疑难解答

假设在.htaccess文件里的某些指令不起作用。可能有多种原因。

最常见的原因是AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置 AllowOverride None 。有一个非常好的測试方法,就是在.htaccess文件随便添加点无意义的垃圾内容,假设server没有返回了一个错误消息,那么差点儿能够断定设置了 AllowOverride None 。
在訪问文档时,假设收到server的出错消息,应该检查Apache的错误日志,能够知道.htaccess文件里哪些指令是不同意使用的,也可能会发现须要纠正的语法错误。

.htaccess工具

不会写的朋友,在这介绍一款非常不错.htaccess的重定向—URL重写工具rewriting-tool

——————————————————————————–

htaccess语法教程

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /blog/$1# 没有输入文件名称的默认到到首页
RewriteCond %{HTTP_HOST} ^(www\.)?

xxx\.com$ RewriteRule ^(/)?$ blog/index.php [L]

以下我開始讲解一下上面的意思:

【RewriteEngine On】

表示重写引擎开,关闭off,作用就是方便的开启或关闭下面的语句,这样就不须要一条一条的凝视语句了。

【RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$】

这是重写条件,前面%{HTTP_HOST}表示当前訪问的网址,仅仅是指前缀部分,格式是www.xxx.com不包含“http://”和“/”,^表示 字符串開始。$表示字符串结尾,\.表示转义的. ,假设不转义也行。推荐转义,防止有些server不支持,?表示前面括号www\.出现0次或1次,这句规则的意思就是假设訪问的网址是xxx.com或者 www.xxx.com就运行下面的语句,不符合就跳过。

【RewriteCond %{REQUEST_URI} !^/blog/】

也是重写条件,%{REQUEST_URI}表示訪问的相对地址,就是相对根文件夹的地址,就是域名/后面的成分,格式上包含最前面的“/”,!表示非,这句语句表示訪问的地址不以/blog/开头。仅仅是开头^,没有结尾$

【RewriteCond %{REQUEST_FILENAME} !-f】

【RewriteCond %{REQUEST_FILENAME} !-d】

这两句语句的意思是请求的文件或路径是不存在的,假设文件或路径存在将返回已经存在的文件或路径

【RewriteRule ^(.*)$ /blog/$1】

重写规则,最重要的部分,意思是当上面的RewriteCond条件都满足的时候,将会运行此重写规则,^(.*)$是一个正则表达的 匹配,匹配的是当前请求的URL。^(.*)$意思是匹配当前URL随意字符,.表示随意单个字符,*表示匹配0次或N次(N>0),后面 /blog/$1是重写成分,意思是将前面匹配的字符重写成/blog/$1,这个$1表示反向匹配,引用的是前面第一个圆括号的成分,即^(.*)$中 的.* ,事实上这儿将会出现一个问题,后面讨论。

【RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$】

【RewriteRule ^(/)?$ blog/index.php [L]】

这两句的意思是指请求的host地址是www.xxx.com是。假设地址的结尾仅仅有0个或者1个“/”时,将会重写到子文件夹下的主页,我猜想这主要由于重写后的地址是不能自己主动寻找主页的,须要自己指定。

如今说说出现的问题。RewriteRule ^(.*)$ /blog/$1 前部分 ^(.*)$ 将会匹配当前请求的url。

比如:请求网址是http://www.xxx.com/a.html,究竟是匹配整个http://www.xxx.com/a.html,还是仅仅匹配/a.html即反斜杠后面的成分,还是仅仅匹配a.html。

答案是:依据RewriteBase规则规定。假设rewritebase 为/。将会匹配a.html,不带前面的反斜杠,所以上条语句应该写成RewriteRule ^(.*)$ blog/$1(不带/),只是实际应用上带上前面的反斜杠,也能够用,可能带不带都行。

如今问题出来了,假设不设置rewritebase 为/ 。将会匹配整个网址http://www.xxx.com/a.html,显然这是错误的,所以应该加入这条:RewiteBase /

另一个问题是,不能保证每一个人输入的网址都是小写的,假设输入大写的呢,linux系统是区分大写和小写的,所以应该在RewriteCond后加入[NC]忽略大写和小写的。

至此,完整的语句应该是:

RewriteEngine On
RewiteBase /
RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ blog/$1# 没有输入文件名称的默认到到首页
RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$ [NC]
RewriteRule ^(/)?

$ blog/index.php [L]

假设后面还继续有语句的,就不应该加上最后的[L],由于这是表示最后一条语句的意思。

防盗链的语句,相同须要加入RewiteBase /。例如以下:

RewriteEngine on
RewiteBase /
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !xxx.info [NC]
RewriteRule \.(jpg|gif|png|bmp|swf|jpeg)$ /error/daolian.gif [R,NC,L]

假设后面还继续有语句的,就不应该加上最后的[L],/error/daolian.gif为别人盗链时显示的图片。

以下附上简单的语法规则和flags

【RewriteCond语法】

RewriteCond TestString CondPattern [flags]

rewritecond的其它使用方法:

“-d”(文件夹)

将TestString视为一个路径名并測试它是否为一个存在的文件夹。

“-f”(常规文件)

将TestString视为一个路径名并測试它是否为一个存在的常规文件。

“-s”(非空的常规文件)

将TestString视为一个路径名并測试它是否为一个存在的、尺寸大于0的常规文件。

“-l”(符号连接)

将TestString视为一个路径名并測试它是否为一个存在的符号连接。

“-x”(可运行)

将TestString视为一个路径名并測试它是否为一个存在的、具有可运行权限的文件。该权限由操作系统检測。

“-F”(对子请求存在的文件)

检查TestString是否为一个有效的文件,并且能够在server当前的訪问控制配置下被訪问。

它使用一个内部子请求来做检查。因为会减少server的性能,所以请慎重使用!

“-U”(对子请求存在的URL)

检查TestString是否为一个有效的URL,并且能够在server当前的訪问控制配置下被訪问。

它使用一个内部子请求来做检查,因为会减少server的性能,所以请慎重使用!

【RewriteRule语法:】

RewriteRule Pattern Substitution [flags]

【flags】

“chain|C”(链接下一规则)

此标记使当前规则与下一个规则相链接。

它产生这种效果:假设一个规则被匹配,则继续处理其后继规则。也就是这个标记不起作用;假设该规则不被匹配。则其后继规则将被跳过。

比方,在一个文件夹级规则中运行一个外部重定向时。你可能须要删除”.www”(此处不应该出现”.www”)。

“cookie|CO=NAME:VAL:domain[:lifetime[:path]]”(设置cookie)

在client设置一个cookie。cookie的名称是NAME,值是VAL。domain是该cookie的域,比方”.apache.org”。可选的lifetime是cookie的有效期(分钟)。可选的path是cookie的路径。

“env|E=VAR:VAL”(环境变量设置)

此标记将环境变量VAR的值为VAL,VAL能够包括可扩展的正則表達式反向引用($N和%N)。

此标记能够多次使用以设置多个变量。这些变量能够在其后很多情况下被间接引用。一般是在XSSI(<!–#echo var=”VAR”–>)或CGI($ENV{“VAR”})中,也能够在后继的RewriteCond指令的CondPattern參数中通过%{ENV:VAR}引用。使用它能够记住从URL中剥离的信息。

“forbidden|F”(强制禁止URL)

强制禁止当前URL,也就是马上反馈一个HTTP响应码403(被禁止的)。

使用这个标记。能够链接若干个RewriteConds来有条件地堵塞某些URL。

“gone|G”(强制废弃URL)

强制当前URL为已废弃,也就是马上反馈一个HTTP响应码410(已废弃的)。

使用这个标记,能够标明页面已经被废弃而不存在了。

“handler|H=Content-handler”(强制指定内容处理器)

强自制定目标文件的内容处理器为Content-handler。

比如,用来模拟mod_alias模块的ScriptAlias指令,以强制映射目录内的全部文件都由”cgi-script”处理器处理。

“last|L”(结尾规则)

马上停止重写操作,并不再应用其它重写规则。

它相应于Perl中的last命令或C语言中的break命令。这个标记用于阻止当前已被重写的URL被后继规则再次重写。

比如,使用它能够重写根路径的URL(“/”)为实际存在的URL(比方:”/e/www/”)。

“next|N”(从头再来)

又一次运行重写操作(从第一个规则又一次開始)。此时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理过的URL。

它相应于Perl中的next命令或C语言中的continue命令。此标记能够又一次開始重写操作(马上回到循环的开头)。可是要小心,不要制造死循环!

“nocase|NC”(忽略大写和小写)

它使Pattern忽略大写和小写。也就是在Pattern与当前URL匹配时。”A-Z”和”a-z”没有差别。

“noescape|NE”(在输出中不正确URI进行转义)

此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 普通情况下,特殊字符(“%”, “$”, “;”等)会被转义为等值的十六进制编码(“%25′, “%24′, “%3B”等)。此标记能够阻止这种转义,以同意百分号等符号出如今输出中。比方:

RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]

能够使”/foo/zed转向到一个安全的请求”/bar?arg=P1=zed”。

“nosubreq|NS”(不正确内部子请求进行处理)

在当前请求是一个内部子请求时。此标记强制重写引擎跳过该重写规则。比方。在mod_include试图搜索文件夹默认文件(index.xxx)时,Apache会在内部产生子请求。对于子请求。重写规则不一定实用。并且假设整个规则集都起作用,它甚至可能会引发错误。所以。能够用这个标记来排除某些规则。

使用原则:假设你为URL加入了CGI脚本前缀,以强制它们由CGI脚本处理,但对子请求处理的出错率(或者资源开销)非常高,在这样的情况下,能够使用这个标记。

“proxy|P”(强制为代理)

此标记使替换成分被内部地强制作为代理请求发送,并马上中断重写处理。然后把处理移交给mod_proxy模块。你必须确保此替换串是一个可以被mod_proxy处理的有效URI(比方以http://hostname开头),否则将得到一个代理模块返回的错误。使用这个标记,可以把某些远程成分映射到本地server域名空间,从而增强了ProxyPass指令的功能。

注意:要使用这个功能,必须已经启用了mod_proxy模块。

“passthrough|PT”(移交给下一个处理器)

此标记强制重写引擎将内部request_rec结构中的uri字段设置为filename字段的值。这个小小的改动使得RewriteRule指令的输出可以被(从URI转换到文件名称的)Alias, ScriptAlias, Redirect等指令进行兴许处理[原文:This flag is just a hack to enable post-processing of the output of RewriteRule directives, using Alias, ScriptAlias, Redirect, and other directives from various URI-to-filename translators.]。举一个能说明其含义的样例: 假设要将/abc重写为/def。 然后再使用mod_alias将/def转换为/ghi,能够这样:

RewriteRule ^/abc(.*) /def$1 [PT]

Alias /def /ghi

假设省略了PT标记。尽管将uri=/abc/…重写为filename=/def/…的部分运作正常,可是兴许的mod_alias在试图将URI转换到文件名称时会遭遇失效。

注意:假设须要混合使用多个将URI转换到文件名称的模块时,就必须使用这个标记。

。此处混合使用mod_alias和mod_rewrite就是个典型的样例。

“qsappend|QSA”(追加查询字符串)

此标记强制重写引擎在已有的替换字符串中追加一个查询字符串,而不是简单的替换。假设须要通过重写规则在请求串中添加信息,就能够使用这个标记。

“redirect|R [=code]“(强制重定向)

若Substitution以http://thishost[:thisport]/(使新的URL成为一个URI)开头,能够强制性运行一个外部重定向。

假设没有指定code。则产生一个HTTP响应码302(暂时性移动)。假设须要使用在300-400范围内的其它响应代码,仅仅需在此指定就可以(或使用下列符号名称之中的一个:temp(默认), permanent, seeother)。使用它能够把规范化的URL反馈给client,如将”/~”重写为”/u/”,或始终对/u/user加上斜杠,等等。

注意:在使用这个标记时。必须确保该替换字段是一个有效的URL。否则。它会指向一个无效的位置。而且要记住,此标记本身仅仅是对URL加上http://thishost[:thisport]/前缀,重写操作仍然会继续进行。

通常,你还会希望停止重写操作而马上重定向。那么就还须要使用”L’标记。

“skip|S=num”(跳过后继规则)

此标记强制重写引擎跳过当前匹配规则之后的num个规则。它能够模拟if-then-else结构:最后一个规则是then从句,而被跳过的skip=N个规则是else从句。注意:它和”chain|C”标记是不同的!

“type|T=MIME-type”(强制MIME类型)

强制目标文件的MIME类型为MIME-type,能够用来基于某些特定条件强制设置内容类型。比方,以下的指令能够让.php文件在以.phps扩展名调用的情况下由mod_php依照PHP源码的MIME类型(application/x-httpd-php-source)显示:

RewriteRule ^(.+\.php)s$ $1 [T=application/x-httpd-php-source]

.htaccess实例

http://cloudbbs.org/forum.php?mod=viewthread&tid=7455&page=1&extra=#pid41053

http://www.chinaz.com/web/2010/0415/111514.shtml

參考:http://baike.baidu.com/view/91163.htm

http://hi.baidu.com/wojiubaibudu/item/4b3513c74a8fe47aced4f817

.htaccess rewrite 规则具体说明

来源网址: http://www.cnphp.info/htaccess-rewrite.html

作者: freemouse 日期 2010年07月22日 | 能够转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明

网址: http://www.cnphp.info/htaccess-rewrite.html

用Apache虚拟主机的朋友非常多,apache提供的.htaccess模块能够为每一个虚拟主机设定rewrite规则,这对站点SEO优化相当实用。同一时候也改善了用户体验。

国内的虚拟机一般不提供.htaccess功能(据我所知。discuz的主机好像提供此功能),而在国外主机中。.htaccess功能似乎是标配,笔者的Blog架在MT上,支持.htaccess,每次看到一堆别人写好了的.htaccess设置。非常多命令都不甚了了,查看、改动起来非常不方便。痛定思痛,潜心学习一下,知其所以然嘛~

学习前提:(不会的朋友要学习一下,才干更好的理解以下的文字呢)

  • Linux基础(不会也没事啦,写个.htaccess不是必需大费周折啦,推荐:鸟哥私房菜linux基础)
  • 正則表達式(Rewrite规则建立在正则的基础之上。推荐:正則表達式30分钟新手教程)

rewrite的语法格式

  1. RewriteEngine On #要想rewrite起作用,必需要写上哦
  2. RewriteBase url-path #设定基准文件夹。比如希望对根文件夹下的文件rewrtie,就是”/”
  3. RewriteCond test-string condPattern #写在RewriteRule之前,能够有一或N条,用于測试rewrite的匹配条件,具体怎么写,后面会具体说到。
  4. RewriteRule Pattern Substitution #规则

RewriteEngine On|Off

RewriteEngine 用于开启或停用rewrite功能。

rewrite configurations 不会自己主动继承,因此你得给每一个你想用 rewrite功能的虚拟主机文件夹中加上这个指令。

RewriteBase URL-path

RewriteBase用于设定重写的基准URL。在下文中,你能够看见RewriteRule能够用于文件夹级的配置文件里 (.htaccess)并在局部范围内起作用。即规则实际处理的仅仅是剥离了本地路径前缀的一部分。处理结束后,这个路径会被自己主动地附着回去。默认值 是”RewriteBase physical-directory-path”。

在对一个新的URL进行替换时,此模块必须把这个URL又一次注入到server处理中。为此。它必须知道其相应的URL前缀或者说URL基准。

通常,此前缀就是 相应的文件路径。

可是,大多数站点URL不是直接相应于其物理文件路径的,因而一般不能做这种假定! 所以在这种情况下。就必须用RewriteBase指令来指定正确的URL前缀。

假设你的站点serverURL不是与物理文件路径直接相应的,而又须要使用RewriteBase指令,则必须在每一个相应的.htaccess文件里指定 RewriteRule 。

RewriteCond TestString CondPattern [flags]

RewriteCond指令定义了一个规则的条件,即。在一个RewriteRule指令之前有一个或多个RewriteCond指令。

条件之后的重写规则仅在当前URI与pattern匹配而且符合这些条件的时候才会起作用。

TestString是一个纯文本的字符串,可是还能够包括下列可扩展的成分:

  1. RewriteRule反向引用: 引用方法是 $N  (0 <= N <= 9) 引用当前(带有若干RewriteCond指令的)RewriteRule中的 与pattern匹配的分组成分(圆括号!)。
  2. RewriteCond反向引用: 引用方法是 %N  (1 <= N <= 9) 引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!)。
  3. RewriteMap 扩展: 引用方法是 ${mapname:key|default}
  4. server变量: 引用方法是 %{ NAME_OF_VARIABLE }  这个是我们最常使用到的功能

NAME_OF_VARIABLE详细数值见下表:

HTTP headers:

connection & request:

HTTP_USER_AGENT

HTTP_REFERER

HTTP_COOKIE

HTTP_FORWARDED

HTTP_HOST

HTTP_PROXY_CONNECTION

HTTP_ACCEPT

REMOTE_ADDR

REMOTE_HOST

REMOTE_USER

REMOTE_IDENT

REQUEST_METHOD

SCRIPT_FILENAME

PATH_INFO

QUERY_STRING

AUTH_TYPE

server internals:

system stuff:

specials:

DOCUMENT_ROOT

SERVER_ADMIN

SERVER_NAME

SERVER_ADDR

SERVER_PORT

SERVER_PROTOCOL

SERVER_SOFTWARE

TIME_YEAR

TIME_MON

TIME_DAY

TIME_HOUR

TIME_MIN

TIME_SEC

TIME_WDAY

TIME

API_VERSION

THE_REQUEST

REQUEST_URI

REQUEST_FILENAME

IS_SUBREQ

这些都相应于类似命名的HTTP MIME头、Apacheserver的C变量以及Unix系统中的 struct tm字段,大多数都在其它的手冊或者CGI规范中有所讲述。

而当中为mod_rewrite所特有的变量有:

IS_SUBREQ

假设正在处理的请求是一个子请求,它包括字符串”true”。否则就是”false”。 模块为了解析URI中的附加文件。有可能会产生子请求。

API_VERSION

这是正在使用的httpd中(server和模块之间内部接口)的Apache模块API的版本号, 其定义位于include/ap_mmn.h中。此模块版本号相应于正在使用的Apache的版本号 (比方,在Apache 1.3.14的发行版中,这个值是19990320:10)。

通常,对它感兴趣的是模块的作者。

THE_REQUEST

这是由浏览器发送给server的完整的HTTP请求行。(比方, “GET /index.html HTTP/1.1″). 它不包括不论什么浏览器发送的附加头信息。

REQUEST_URI

这是在HTTP请求行中所请求的资源。(比方上述样例中的”/index.html”.)

REQUEST_FILENAME

这是与请求相匹配的完整的本地文件系统的文件路径名或描写叙述.

CondPattern是条件pattern, 即, 一个应用于当前实例TestString的正則表達式, 即, TestString将会被计算然后与CondPattern匹配.

注意:CondPattern是一个兼容perl的正則表達式。 可是还有若干补充:

  1. 能够在pattern串中使用’

    1
    !

    ‘ 字符(惊叹号)来实现匹配的反转

RewriteOptions Options

1
RewriteOptions

指令为当前server级和文件夹级的配置设置一些选项。

Option能够是下列值之中的一个:

1
inherit

此值强制当前配置能够继承其父配置。 在虚拟主机级配置中,它意味着主server的映射表、条件和规则能够被继承。 在文件夹级配置中,它意味着其父文件夹的

1
.htaccess

中的条件和规则能够被继承。

1
MaxRedirects=<var>number</var>

为了避免文件夹级

1
RewriteRule

的无休止的内部重定向, 在此类重定向和500内部server错误次数达到一个最大值的时候。

1
mod_rewrite

会停止对此请求的处理。 假设你确实须要对每一个请求同意大于10次的内部重定向,能够增大这个值。

RewriteRule Pattern Substitution [flags]

1
RewriteRule

指令是重写引擎的根本。此指令能够多次使用。 每一个指令定义一个简单的重写规则。这些规则的定义顺序尤为重要, 由于,在执行时刻,规则是按这个顺序逐一生效的.

Pattern是一个作用于当前URL的兼容perl的正則表達式。

此外,还能够使用否字符(‘

1
!

‘)的pattern前缀,以实现pattern的反转。可是,须要注意的是使用否字符以反转pattern时。pattern中不能使用分组的通配成分;即$N。

重写规则中的Substitution是。 当原始URL与Pattern相匹配时,用以替代(或替换)的字符串。

除了纯文本,还能够使用

  • 1
    $N

    反向引用RewriteRule的pattern

  • 1
    %N

    反向引用最后匹配的RewriteCond pattern

  • 规则条件測试字符串中(
    1
    %{VARNAME}

    )的server变量

  • 映射函数调用(
    1
    ${mapname:key|default})
以下给出几个完整的样例供各位參考:

一、防盗链功能

仅仅这四行就实现了防盗链是不是非常奇妙^_^,编写起来是不是又认为复杂。

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]

RewriteCond %{HTTP_REFERER} !^$

RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

二、网址规范化

这个是把全部二级域名都重定向到www.yourdomain.com的样例,如今看来是不是非常easy了?

Options +FollowSymLinks

rewriteEngine on

rewriteCond %{http_host} ^yourdomain.com [NC]

rewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

三、暂时错误页面

当你的站点在升级、改动的时候,你最好让訪客转到指定的页面,而不是没做完的页面或者是错误页。

RewriteEngine on

RewriteCond %{REQUEST_URI} !/maintenance.html$

RewriteCond %{REMOTE_ADDR} !^123.123.123.123

RewriteRule $ /error.html [R=302,L]

四、重定向RSS地址到FeedSky

除了能够更改模板里的RSS地址外,.htaccess也能实现RSS地址的更改,并更加方便。

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} !FeedSky [NC]

RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]

RewriteRule ^feed/?([_0-9a-z-]+)?

/?

$ http://feed.feedsky.com/yours

=========================================================================================

附录:flags

  1. ‘redirect|R [=code]‘ (强制重定向 redirect)

    以http://thishost[:thisport]/(使新的URL成为一个URI) 为前缀的Substitution能够强制性运行一个外部重定向。 假设code没有指定,则产生一个HTTP响应代码302(暂时性移动)。 假设须要使用在300-400范围内的其它响应代码。仅仅需在此指定这个数值就可以, 另外,还能够使用下列符号名称之中的一个: temp (默认的), permanent, seeother. 用它能够把规范化的URL反馈给client,如, 重写“/~”为 “/u/”,或对/u/user加上斜杠。等等。

    注意: 在使用这个标记时。必须确保该替换字段是一个有效的URL! 否则。它会指向一个无效的位置! 而且要记住,此标记本身仅仅是对URL加上 http://thishost[:thisport]/的前缀。重写操作仍然会继续。

    通常。你会希望停止重写操作而马上重定向。则还须要使用’L’标记.

  2. ‘forbidden|F’ (强制URL为被禁止的 forbidden)

    强制当前URL为被禁止的,即,马上反馈一个HTTP响应代码403(被禁止的)。 使用这个标记,能够链接若干RewriteConds以有条件地堵塞某些URL。

  3. ‘gone|G’ (强制URL为已废弃的 gone)

    强制当前URL为已废弃的。即。马上反馈一个HTTP响应代码410(已废弃的)。 使用这个标记,能够标明页面已经被废弃而不存在了.

  4. ‘proxy|P’ (强制为代理 proxy)

    此标记使替换成分被内部地强制为代理请求,并马上(即, 重写规则处理马上中断)把处理移交给代理模块。

    你必须确保此替换串是一个有效的(比方常见的以 http://hostname开头的)能够为Apache代理模块所处理的URI。

    使用这个标记,能够把某些远程成分映射到本地server名称空间, 从而增强了ProxyPass指令的功能。 注意: 要使用这个功能,代理模块必须编译在Apacheserver中。 假设你不能确定,能够检查“httpd -l”的输出中是否有mod_proxy.c。 假设有,则mod_rewrite能够使用这个功能; 假设没有,则必须启用mod_proxy并又一次编译“httpd”程序。

  5. ‘last|L’ (最后一个规则 last)

    马上停止重写操作,并不再应用其它重写规则。 它相应于Perl中的last命令或C语言中的break命令。

    这个标记能够阻止当前已被重写的URL为其后继的规则所重写。 举例,使用它能够重写根路径的URL(‘/’)为实际存在的URL, 比方, ‘/e/www/’.

  6. ‘next|N’ (又一次运行 next round)

    又一次运行重写操作(从第一个规则又一次開始). 这时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理的URL。

    它相应于Perl中的next命令或C语言中的continue命令。 此标记能够又一次開始重写操作,即, 马上回到循环的头部。 可是要小心,不要制造死循环!

  7. ‘chain|C’ (与下一个规则相链接 chained)

    此标记使当前规则与下一个(其本身又能够与其后继规则相链接的。 并能够如此重复的)规则相链接。 它产生这样一个效果: 假设一个规则被匹配,一般会继续处理其后继规则。 即。这个标记不起作用;假设规则不能被匹配。 则其后继的链接的规则会被忽略。

    比方。在运行一个外部重定向时。 对一个文件夹级规则集。你可能须要删除“.www” (此处不应该出现“.www”的)。

  8. ‘type|T=MIME-type’ (强制MIME类型 type)

    强制目标文件的MIME类型为MIME-type。 比方,它能够用于模拟mod_alias中的ScriptAlias指令, 以内部地强制被映射文件夹中的全部文件的MIME类型为“application/x-httpd-cgi”.

  9. ‘nosubreq|NS’ (仅用于不正确内部子请求进行处理 no internal sub-request)

    在当前请求是一个内部子请求时。此标记强制重写引擎跳过该重写规则。 比方,在mod_include试图搜索可能的文件夹默认文件(index.xxx)时, Apache会内部地产生子请求。对子请求。它不一定实用的。并且假设整个规则集都起作用, 它甚至可能会引发错误。

    所以,能够用这个标记来排除某些规则。 依据你的须要遵循下面原则: 假设你使用了有CGI脚本的URL前缀。以强制它们由CGI脚本处理。 而对子请求处理的出错率(或者开销)非常高。在这样的情况下,能够使用这个标记。

  10. ‘nocase|NC’ (忽略大写和小写 no case)

    它使Pattern忽略大写和小写,即, 在Pattern与当前URL匹配时。’A-Z’ 和’a-z’没有差别。

  11. ‘qsappend|QSA’ (追加请求串 query string append)

    此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。 假设须要通过重写规则在请求串中添加信息。就能够使用这个标记。

  12. ‘noescape|NE’ (在输出中不正确URI作转义 no URI escaping)

    此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 普通情况下,特殊字符(如’%’, ‘$’, ‘;’等)会被转义为等值的十六进制编码。 此标记能够阻止这种转义,以同意百分号等符号出如今输出中,如: RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]

    能够使’/foo/zed’转向到一个安全的请求’/bar?arg=P1=zed’.

  13. ‘passthrough|PT’ (移交给下一个处理器 pass through)

    此标记强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值,它仅仅是一个小改动。使之能对来自其它URI到文件名称翻译器的 Alias。ScriptAlias, Redirect 等指令的输出进行兴许处理。举一个能说明其含义的样例: 假设要通过mod_rewrite的重写引擎重写/abc为/def。 然后通过mod_alias使/def转变为/ghi,能够这样: RewriteRule ^/abc(.*) /def$1 [PT]

    Alias /def /ghi

    假设省略了PT标记。尽管mod_rewrite运作正常。 即, 作为一个使用API的URI到文件名称翻译器, 它能够重写uri=/abc/…为filename=/def/…, 可是,兴许的mod_alias在试图作URI到文件名称的翻译时,则会失效。

    注意: 假设须要混合使用不同的包括URI到文件名称翻译器的模块时, 就必须使用这个标记。混合使用mod_alias和mod_rewrite就是个典型的样例。

    For Apache hackers

    假设当前Apache API除了URI到文件名称hook之外,另一个文件名称到文件名称的hook。 就不须要这个标记了! 可是,假设没有这样一个hook,则此标记是唯一的解决方式。 Apache Group讨论过这个问题,并在Apache 2.0 版本号中会添加这样一个hook。

  14. ’skip|S=num’ (跳过后继的规则 skip)

    此标记强制重写引擎跳过当前匹配规则后继的num个规则。 它能够实现一个伪if-then-else的构造: 最后一个规则是then从句,而被跳过的skip=N个规则是else从句. (它和’chain|C’标记是不同的!)

  15. ‘env|E=VAR:VAL’ (环境变量设置 environment variable)

    此标记使环境变量VAR的值为VAL, VAL能够包括可扩展的反向引用的正則表達式$N和%N。 此标记能够多次使用以设置多个变量。

    这些变量能够在其后很多情况下被间接引用,但一般是在XSSI (via or CGI (如 $ENV{‘VAR’})中。 也能够在后继的RewriteCond指令的pattern中通过%{ENV:VAR}作引用。

    使用它能够从URL中剥离并记住一些信息。

  16. ‘cookie|CO=NAME:VAL:domain[:lifetime[:path]]’ (设置cookie)

    它在client浏览器上设置一个cookie。 cookie的名称是NAME,其值是VAL。

    domain字段是该cookie的域,比方’.apache.org’, 可选的lifetime是cookie生命期的分钟数。 可选的path是cookie的路径。

深入阅读:http://oss.org.cn/man/newsoft/ApacheManual/mod/mod_rewrite.html

全面理解.htaccess语法中RewriteCond和RewriteRule意义

来源网址: http://blog.sina.com.cn/s/blog_7048e38101017xdx.html

(2012-08-13 10:38:44)

关于.htaccess伪静态的使用,章郎虫一直没有好好想过。曾经一直是在网上找现成的,然后改动下网址实现重定向。今天我专门找资料看了下RewriteCond和RewriteRule的意思及用法。然后回过头看《站点地址更改之htaccess和php的301重定向》这篇文章,最终有些理解。如今不用一直找现成的代码。也能够自己写一些规则实现重定向了。以下就简单的介绍下他们的用法。

RewriteCond的语法

RewriteCond TestString CondPattern [Flags]

当中的TestString是指一个文本格式的条件,样例中用的是环境变量名HTTP_HOST所包括的内容(Name= Value),这是一个map(键值对)格式的数据类型。

CondPattern是条件參数,这儿以第一个样例为例,就是abc.com。

Flags标识是是第三个參数,能够用来紧跟下一个条件,这儿用OR表示或者,假设没有[Flags],则用隐含的AND,表示而且。

其他的还能够NC等等,表示忽略大写和小写

RewriteCond就像我们程序中的if语句一样,表示假设符合某个或某几个条件则运行RewriteCond以下紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解。以下来看看几个样例。

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0.*

RewriteRule index.php index.m.php

RewriteCond %{HTTP_USER_AGENT} ^Lynx.*

RewriteRule index.php index.L.php

RewriteRule index.php index.b.php

上面语句的作用是当你是用FF浏览器訪问index.php这个文件的时候。会自己主动让你訪问到index.m.php这个文件。当你是用一些移动终端訪问 的 时候。会让你对index.php这个文件的訪问实际訪问的是index.L.php去。假设你是用其他的浏览器訪问的时候。会让你跳到 index.b.php。

RewriteRule的语法

RewriteRule Pattern Substitution [Flags]

当中的Pattern就是參数。一般为一些文件的扩展名。Substitution是用来替换前面用的,这儿的Flags,经常使用的R表示 redirect(强制重定向),F表示forbidden(禁止訪问)。L表示last(最后),通常当你希望停止重写操作而马上重定向时,可用它。

.htaccess中用到的正则

元字符^(和数字6在同一个键位上的符号)和$都匹配一个位置,这和\b有点类似。

^匹配你要用来查找的字符串的开头

$匹配结尾。

比方一个站点假设要求你填写的QQ号必须为5位到12位数字时,能够使用:^\d{5,12}$。

假设你对正則表達式不是非常明确。能够看下正則表達式的教程。

Source from: http://www.hellonet8.com/897.html

URL重写 htaccess文件写法的10个技巧

来源网址: http://blog.sina.com.cn/s/blog_7069146d01015ikf.html

(2012-07-26 03:25:44)

“.htaccess”文件往往被网页设计师们忽略。假如你还不知道什么是htaccess的话,你能够去查一下wikipedia。

它是文件夹级别的配置文件,有经常使用的网页server支持这样的配置,比如Apache。以下我将列出10条实用的.htaccess配置技巧。

1. 反盗链

那些盗用了你的内容,还不愿意自己存储图片的站点是无耻的。你能够通过下面配置来放置别人盗用你的图片:

RewriteBase /

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www.)?yoursite.com/.*$ [NC]

RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

2. 防止文件夹浏览

有时候文件夹浏览是实用的。但大部分情况会有安全问题。为了让你的站点更安全。你能够通过htaccess文件来禁用这个功能:

Options All -Indexes

3. SEO友好的301永久重定向

这一招是我经常使用的。每次我更改站点URL结构的时候。我都会做301重定向:

Redirect 301 http://www.yoursite.com/article.html http://www.yoursite.com/archives/article 4. 显示个性化的 404 错误页面

当用户訪问了一个不存在的页面的时候,网页server会显示“404 file not found”错误。有非常多CMS能够让你设置自己定义的错误页面,但最简单的方法是更改htaccess:

ErrorDocument 404 /404.html

5. 设置文件夹的默认页面

假如你须要为不同的文件夹设置不同的默认页面,你能够非常easy的通过 .htaccess 实现:

DirectoryIndex about.html

6. 基于referer来限制站点訪问

站长通常不会限制站点訪问,可是当你发现有一些站点尽给你带来垃圾流量的话。你就应该屏蔽他们:

<IfModule mod_rewrite.c>

RewriteEngine on  RewriteCond %{HTTP_REFERER} spamteam.com [NC,OR]

RewriteCond %{HTTP_REFERER} trollteam.com [NC,OR]

RewriteRule .* – [F]

</ifModule>

7. 限制PHP上传文件大小

这招在共享空间的server上非常实用,能够让我的用户上传更大的文件。

第一个是设置最大的上传文件大小。第二个是设置最大的POST请求大小,第三个PHP脚本最长的运行时间,最后一个是脚本解析上传文件的最长时间:

php_value upload_max_filesize 20M

php_value post_max_size 20M

php_value max_execution_time 200

php_value max_input_time 200

8. 压缩文件

你能够通过压缩文件来降低网络流量,也页面装载时间:

AddOutputFilterByType DEFLATE text/plain

AddOutputFilterByType DEFLATE text/html

AddOutputFilterByType DEFLATE text/xml

AddOutputFilterByType DEFLATE text/css

AddOutputFilterByType DEFLATE application/xml

AddOutputFilterByType DEFLATE application/xhtml+xml

AddOutputFilterByType DEFLATE application/rss+xml

AddOutputFilterByType DEFLATE application/javascript

AddOutputFilterByType DEFLATE application/x-javascript

9. 缓存文件

这一点还须要解释吗?

<FilesMatch “.(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$”>

Header set Cache-Control “max-age=2592000〃

</FilesMatch>

10. 加入尾部的反斜杠

我并不确定。可是非常多文章。非常多人都说加入尾部反斜杠故意于SEO:

<IfModule mod_rewrite.c>

RewriteCond %{REQUEST_URI} /+[^\.]+$

RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

</IfModule>

====================

引用:http://www.c658.com/658/html/xxlm/itxxl/882.html

.htaccess基本的语法和应用

.htaccess是Apacheserver的一个很强大的分布式配置文件。

正确的理解和使用.htaccess文件,能够帮助我们优化自己的server或者虚拟主机。

怎样启用htaccess

以windows为例,进入apache/conf文件夹,找到httpd.conf文件。去掉

LoadModule rewrite_module modules/mod_rewrite.so

前面的#,然后设置文件夹属性AllowOverride All,重新启动apache就可以

以下是一个典型的htaccess文件

           # 开启URL重写
RewriteEngine on
# URL重写的作用域
# RewriteBase /path/to/url
# 满足如何的条件
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
# 应用如何的规则
RewriteRule .?

http://www.example.com%{REQUEST_URI} [R=301,L]

来看看RewriteCond,首先有一个%,由于{HTTP_HOST}是一个apache变量。须要用%来指示。

从!開始就是匹配的条件。支持 正则。!表示不等于,这句话的意思就是:假设HTTP_HOST不是www.example.com。后面的[NC](no case)表示忽略大写和小写。常见的还有

  • [L](last):终止一系列的RewriteCond和RewriteRule
  • [R](redirect):触发一个显示的跳转,也能够指定跳转类型,如[R=301]
  • [F](forbidden):禁止查看特定文件,apache会触发403错误

图片防盗链

           RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?

example\.com/ [NC] RewriteRule \.(gif|jpg|png)$ - [F]

由于是基于HTTP_REFERER的验证。所以仅仅能防止一般的图片盗链,由于HTTP_REFERER是比較easy伪造的

自己定义404错误页面

假设用户输入了一个不存在的url,那么就显示自己定义的错误页面

           ErrorDocument 404 /404.html
# 其它同理
ErrorDocument 500 /500.html

处理移动过的文件

           Redirect 301 /old.html http://yoursite.com/new.html
# 也能够是以下这样
RewriteRule /old.html http://yoursite.com/new.html [R=301,L]
# 假设想隐式跳转(URL地址不变。但实际上内容是其它URL的),就使用以下的
RewriteRule /old.html http://yoursite.com/new.html [L]

对于RewriteRule还有好多文章能够做,比方

           # 把html后缀的url链接到php文件
# $1指代的是前面第1个用括号括起来的内容
RewriteRule ^/?([a-z/]+)\.html$ $1.php [L]
# 或者把旧目录的内容链接到新目录
RewriteRule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [R=301,L]
# 隐藏文件名称
RewriteRule ^/?([a-z]+)$ $1.php [L]
禁止显示文件夹列表

假设文件夹里没有index文件,又没有对该文件夹做过特别的处理,尤其是windows主机。那么该文件夹里的内容就会显示出来,这时能够在根文件夹创建 一个.htaccess文件,然后写上

           Options -Indexes
# 就这么一句就搞定了

阻止/同意特定IP/IP段

           # 禁止全部IP,除了指定的
order deny,allow
deny from all
# 假设想同意IP段。如123.123.123.0 ~ 123.123.123.255,则
# allow from 123.123.123.
allow from 123.123.123.123ErrorDocument 403 /page.html<Files page.html>
allow from all
</Files>#假设想禁止特定IP
deny from 123.123.123.123

加入MIME类型

           AddType video/x-flv .flv
# 假设设置类型为 application/octet-stream 将提示下载
AddType application/octet-stream .pdf

用.htaccess文件实现站点404错误

来源网址: http://www.os1010.com/archives/618

作者:admin  发表于:2012年06月11日 09:25  分类:SEO技术     字体: 小 中 大

定义404错误 页对站点SEO的作用还是非常大的。404 错误意味着链接指向的网页不存在,即原始网页的URL失效。这样的情况常常会发生,非常难避免,当Web server接到类似请求时。会返回一个404 状态码,告诉浏览器要请求的资源并不存在。

可是,Webserver默认的404错误页面,十分呆板,并且对SEO是不利,对于站点流量也是非常大的损失。

如今大多数主机都提供设置404页面的接口,这种不管是国内主机还是国外主机都非常好设置。只是仍然有不少主机不提供设置页面,这种多是国内主机和一些免费主机,本文主要是针对这些主机。并且是针对PHP主机。

1. Apache下设置404错误页面(通常是Linux主机)

(1)           在.htaccess 文件(假设没有则新建一个)中增加例如以下内容:ErrorDocument 404 /404.html,将.htaccess文件上传到站点根文件夹

注:也能够使用这种命令

ErrorDocument 404 http://www.iewb.net/404.htm

ErrorDocument 500 http://www.iewb.net/500.htm

(2)           制作一个404页面,随便您设计,命名为404.html,相同上传到站点根文件夹。假设您还想设置500页面,还能够在.htaccess命令里加上ErrorDocument 404 /500.html 并制作一个500页面传到站点根文件夹

网友不必检验本站的404页面了,由于本站用的是godaddy免费的空间。404页面会有广告。

本文由新未来博客(www.os1010.com)整理,转载请注明!

本文固定链接: http://www.os1010.com/archives/618 | WordPress主机|香港主机空间|香港快速主机|新未来博客

由浅入深剖析.htaccess

来源网址: http://blog.csdn.net/cdefg198/article/details/6645759

2011-07-29 23:36 210人阅读 评论(0) 收藏 举报

1、.htaccess文件使用前提

.htaccess的主要作用就是实现url改写,也就是当浏览器通过url訪问到server某个目录时。作为主人,我们能够来接待这个url,详细地如何接待它。就是此文件的作用。全部的訪问都是通过URL实现,所以.htaccess的作用非同小可。正由于此,所以一般地站点通过设置.htaccess。通过一个十分友好的url吸引用户进来,然后用.htaccess把用户带到须要訪问的位置。

要想使用这个强大功能,就得开启apache里面的重写模块。

前面的文章中以前讲到过windows和ubuntu开启 rewrite模块使用.htaccess 。

事实上开启模块大体的步骤都是一样的,不管是Windows和linux。

2、.htaccess基本的语法介绍

开启重写引擎 :RewriteEngine on

设置重写的根文件夹:RewriteBase /     — 说明 :由于定义了这个文件夹,所以相应的替换就有了一个參照。

匹配全部符合条件的请求:RewriteCond       — 说明:RewriteCond 定义了一系列规则条件,这个指令能够有一条或者多条,仅仅实用户拿来的url符合这些条件之后,我们的.htaccess才開始接待,否则用户就直接自己去訪问所须要的文件夹了。

举个样例,为了能让搜索引擎很多其它地抓取我们的网页而避免反复抓,我们通常把没有www的域名重定向到www.XXX.com,例如以下就实现了这个功能:

RewriteEngine On

RewriteCond %{HTTP_HOST}  ^nbphp\.com$ [NC]

RewriteRule ^(.*)$  http://www.nbphp.com/$1 [R=301,L]

上例便把nbphp.com 重定向到www.nbphp.com

%{HTTP_HOST} 是指取得用户訪问的URL的主域名  然后空格后面是一个正則表達式匹配,意识就是说是否是 nbphp.com 。

假设用户訪问使用的URL满足全部列出的RewriteCond 提出的条件,那么进行下一步RewriteRule 即開始进行引导,这才開始实现.htaccess文件的重要功能。

相同。前面是正則表達式,用户分析用户的除了主域名nbphp.com之外的URL ,^(.*)$的意思就是全部的内容。 然后空格后面写的是我们引导用户訪问的文件夹。我们带着他走到新的一个域名上。$1 指的是前面括号中匹配url所得到的内容。

这样就是一个完整的小样例。关于RewriteCond里 怎样调用url的某个部分。我们能够參考这篇文章(Apache的Mod_rewrite学习 (RewriteCond重写规则的条件);

3、现学现用,学习正則表達式。

推荐一个经典的教程: 正則表達式30分钟新手教程

这个教程的确非常easy。看完基本上写一些简单的正则就没有问题了。正则是一个须要长期使用的工具,隔段时间不用会忘记。所以我每次都看一遍这个教程。

事实上学过之后重要的就是一点内容。

我简单罗列了例如以下:

.  换行符以外的全部字符

\w匹配字母或数字或下划线或汉字

\s匹配随意的空白符

\d匹配数字

\b匹配单词的開始或结束

^匹配字符串的開始

$匹配字符串的结束

*反复零次或很多其它次

*反复零次或很多其它次

+反复一次或很多其它次

?反复零次或一次

{n}反复n次

{n,}反复n次或很多其它次

{n,m}反复n到m次

应用替换时,前面第一个()中匹配的内容后面就用$1引用,第二个()中匹配的就用$2应用……

推荐一个有用的正则在线測试站点 http://www.regextester.com/

我们来分析一下 discuz7.0 搜索引擎优化 htaccess 里面的重写。

RewriteRule ^forum-([0-9]+)-([0-9]+)\.html$  forumdisplay.php?fid=$1&page=$2

首先增加用户通过 nbphp.com/forum-2-3.html 訪问discuz论坛,那么先通过.htaccess过滤,看看是否须要.htaccess引导一下用户,假设满足列出的一系列RewriteCond的条件那么就进行重写。discuz的没有列出RewriteCond 所以应该所有都进行重写。

所以開始进行转写,forum-2-3.html 这个正好符合 列出的^forum-([0-9]+)-([0-9]+)\.html$ 正則表達式。而且 $1 为 2  ,$2为3 ,所以代入后面,即 forumdisplay.php?fid=2&page=3 加上前面的RewriteBase 指定的文件文件夹,那么就带他到制定文件夹的forumdisplay.php?

fid=2&page=3 。

4、常见的.htaccess应用举例(部分样例引自四个样例实战解说.htaccess文件rewrite规则)
4.1防止盗链,假设来得要訪问jpe jpg bmp png结尾的url 用户不是来自我们的站点。那么让他看一张我们站点的展示图片。

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]

RewriteCond %{HTTP_REFERER} !^$

RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

4.2 站点升级的时候,仅仅有特定IP才干訪问,其它的用户将看到一个升级页面

RewriteEngine on

RewriteCond %{REQUEST_URI} !/upgrade.html$

RewriteCond %{REMOTE_HOST} !^24\.121\.202\.30

RewriteRule $ http://www.nbphp.com/upgrade.html [R=302,L]

4.3把老的域名转向新域名

# redirect from old domain to new domain

RewriteEngine On

RewriteRule ^(.*)$http://www.yourdomain.com/$1[R=301,L]

5、一些其它功能
5.1 引出错误文档的文件夹

ErrorDocument 400 /errors/badrequest.html

ErrorDocument 404   http://yoursite/errors/notfound.html

ErrorDocument 401 “Authorization Required

5.2 Blocking users by IP 依据IP阻止用户訪问

order allow,deny

deny from 123.45.6.7

deny from 12.34.5. (整个C类地址)

allow from all

5.3 防止文件夹浏览

# disable directory browsing

Options All -Indexes

5.4设置默认首页

# serve alternate default index page

DirectoryIndex about.html

5.5 把一些老的链接转到新的链接上——搜索引擎优化SEO

Redirect 301 /d/file.htmlhttp://www.htaccesselite.com/r/file.html

5.6为server管理员设置电子邮件。

ServerSignature EMail

SetEnv SERVER_ADMINdefault@domain.com

本文章主要介绍了应用最广最有用的重写功能,记住.htaccess的权限要设置成644

原文链接: .htaccess具体解释及.htaccess參数说明

©本文由 吕 收集整理。引用内容如有犯权请留言,转载请注明原文链接
来源网址: http://www.cnblogs.com/adforce/archive/2012/11/23/2784664.html
本文地址:http://blog.csdn.net/aerchi/article/details/46873515

server.htaccess 具体解释以及 .htaccess 參数说明相关推荐

  1. 具体解释可变參数列表

    可变參数   至少有一个參数 比如:void add(int a,- ){} 例题  模拟printf()函数 #include <stdio.h> #include <stdarg ...

  2. MySQL具体解释(21)------------缓存參数优化

    数据库属于 IO 密集型的应用程序.其主要职责就是数据的管理及存储工作. 而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优 ...

  3. RPM安装包-Spec文件參数具体解释与演示样例分析

    spec文件是整个RPM包建立过程的中心,它的作用就如同编译程序时的Makefile文件. 1.Spec文件參数 spec文件包括建立一个RPM包必需的信息,包括哪些文件是包的一部分以及它们安装在哪个 ...

  4. 运放參数解释及经常使用运放选型

    集成运放的參数较多,当中主要參数分为直流指标和交流指标,外加全部芯片都有极限參数. 本文以NE5532为例,分别对各指标作简单解释. 以下内容除了图片从NE5532数据手冊上截取,其他内容都整理自网络 ...

  5. TVS參数具体解释及选型应用

    一.首先了解TVS管的參数,我们以littelfuse的5.0SMDJ系列为例. 图1 图2 最大峰值脉冲功率 Maximum Peak Pulse Power Pppm峰值脉冲功率为ESD器件上瞬间 ...

  6. fopen 參数具体解释

    fopen fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path, ...

  7. Ngnix中的fastcgi參数性能优化和解释

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luozhonghua2014/article/details/37737823 优化性能參数设置,在 ...

  8. 使用JDBC改变Oracle的session參数 NLS_DATE_FORMAT

    近期项目除了一个问题,场景大概是这种,项目在国外开发.在项目开发过程中使用了大量的Oracle函数TO_DATE,可是开发者没有写第二个參数. 所以项目在国外的server上能够正常执行.但是在国内的 ...

  9. FusionCharts參数中文说明

    FushionCharts是把抽象数据图示化的套件,使用方便,配置简单.其相关參数中文说明例如以下. 功能特性 animation                    是否动画显示数据,默觉得 1( ...

  10. php htaccess实现缓存,使用.htaccess进行浏览器图片文件缓存,_PHP教程

    使用.htaccess进行浏览器图片文件缓存, 对于图片类网站,每次打开页面都要重新下载图片,慢不说,还非常浪费流量.这时就需要用到缓存,强制浏览器缓存图片文件 缓存文件,提问网站访问数度,减少流量消 ...

最新文章

  1. Mosquitto配置----日志设置
  2. 前端接收pdf文件_如何实现springmvc将返回的给前端的pdf文件放在浏览器里预览
  3. matlabpython建模_一直在用Matlab建模,现在Python很火,用学么?
  4. 脚本监控网络状态,输出日志并归档(V2)
  5. 支持 Drupal 的 虚拟空间
  6. 如何用代码填充S/4HANA销售订单行项目的数量字段
  7. 通过rpm包安装、配置及卸载mysql的详细过程.
  8. 树莓派4上跑 .NET Core 3.0,这次,真·64位!
  9. Arm架构下VUE环境的安装
  10. java 生成客户端代码_swagger-codegen生成java客户端代码
  11. CentOS 7如何配置yum源
  12. 嵌入式linux的学习笔记-pipe管道(二)
  13. U盘安装服务器2008系统蓝屏,U盘安装系统造成蓝屏如何解决
  14. 洛谷OJ - P1316 - 丢瓶盖(二分答案)
  15. python模拟网页上传文件_python模拟网页上传文件
  16. 机器狗病毒(又称下载者木马病毒)的手工毒杀
  17. AutoCAD 二次开发
  18. 手机浏览器 JavaScript 调起百度地图导航
  19. MSP430F149;一、TIMEA
  20. NLP之语义自动匹配emoji

热门文章

  1. Lambda 表达式(C# 编程指南)
  2. 【版本控制】分布式的版本控制系统GitHub学习资源汇总
  3. Arcgis自带数据地址
  4. linux压缩文件夹
  5. 计算机丢失msvcrtdll怎么修复,雨林木风修复msvcrtdll 【操作方案】 的详细_
  6. Flutter Provider框架实现简单的购物车
  7. Flutter实战之Builder和StatefulBuilder
  8. Okhttp之RouteSelector简单解析
  9. adb ps shell 查看进程_Appium学废系列(三) adb调试桥命令
  10. Apache Flink CDC 批流融合技术原理分析