.htaccess文件(或者”分布式配置文件”)提供了针对文件夹改变配置的方法。 即。在一个特定的文档文件夹中放置一个包括一个或多个指令的文件, 以做用于此文件夹及其全部子文件夹。javascript
做为用户。所能使用的命令受到限制。管理员可以经过Apache的AllowOverride指令来设置。php
概述来讲,htaccess文件是Apacheserver中的一个配置文件,它负责相关文件夹下的网页配置。经过htaccess文件。可以帮咱们实现:网页301重定向、本身定义404错误页面、改变文件扩展名、赞成/阻止特定的用户或者文件夹的訪问、禁止文件夹列表、配置默认文档等功能。css
.htaccess是什么html
启用.htaccess,需要改动httpd.conf。启用AllowOverride,并可以用AllowOverride限制特定命令的使用。java
假设需要使用.htaccess之外的其它文件名称,可以用AccessFileName指令来改变。好比,需要使用.config ,则可以在server配置文件里按下面方法配置:AccessFileName .config 。linux
笼统地说,.htaccess可以帮咱们实现包含:文件夹password保护、用户本身主动重定向、本身定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、仅仅赞成特定IP地址的用户、禁止文件夹列表,以及使用其它文件做为index文件等一些功能。web
工做原理apache
.htaccess文件(或者”分布式配置文件”)提供了针对每个文件夹改变配置的方法,即在一个特定的文件夹中放置一个包括指令的文件,当中的指令做用于此文件夹及其所有子文件夹。
说明:
假设需要使用.htaccess之外的其它文件名称,可以用AccessFileName指令来改变。ubuntu
好比。需要使用.config ,则可以在server配置文件里按下面方法配置:
AccessFileName .config
一般,.htaccess文件使用的配置语法和主配置文件同样。AllowOverride指令按类别决定了.htaccess文件里哪些指令才是有效的。假设一个指令赞成在.htaccess中使用,那么在本手冊的说明中,此指令会有一个覆盖项段,当中说明了为使此指令生效而必须在AllowOverride指令中设置的值。windows
(不)使用.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
来源网址: 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设置。很是多命令都不甚了了,查看、改动起来很是不方便。痛定思痛,潜心学习一下,知其因此然嘛~
学习前提:(不会的朋友要学习一下,才干更好的理解如下的文字呢)
rewrite的语法格式:
RewriteEngine 用于开启或停用rewrite功能。
rewrite configurations 不会本身主动继承,所以你得给每个你想用 rewrite功能的虚拟主机文件夹中加上这个指令。
RewriteBase用于设定重写的基准URL。在下文中,你可以看见RewriteRule可以用于文件夹级的配置文件里 (.htaccess)并在局部范围内起做用。即规则实际处理的仅仅是剥离了本地路径前缀的一部分。处理结束后,这个路径会被本身主动地附着回去。默认值 是”RewriteBase physical-directory-path”。
在对一个新的URL进行替换时,此模块必须把这个URL又一次注入到server处理中。为此。它必须知道其相应的URL前缀或者说URL基准。
一般,此前缀就是 相应的文件路径。
但是,大多数站点URL不是直接相应于其物理文件路径的,于是通常不能作这种假定! 因此在这种状况下。就必须用RewriteBase指令来指定正确的URL前缀。
假设你的站点serverURL不是与物理文件路径直接相应的,而又需要使用RewriteBase指令,则必须在每个相应的.htaccess文件里指定 RewriteRule 。
RewriteCond指令定义了一个规则的条件,即。在一个RewriteRule指令以前有一个或多个RewriteCond指令。
条件以后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起做用。
TestString是一个纯文本的字符串,但是还可以包括下列可扩展的成分:
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 |
!
|
‘ 字符(惊叹号)来实现匹配的反转。
1 |
RewriteOptions
|
指令为当前server级和文件夹级的配置设置一些选项。
Option可以是下列值之中的一个:
1 |
inherit
|
1 |
.htaccess
|
中的条件和规则可以被继承。
1 |
MaxRedirects=<var>number</var>
|
1 |
RewriteRule
|
的无休止的内部重定向, 在此类重定向和500内部server错误次数达到一个最大值的时候。
1 |
mod_rewrite
|
会中止对此请求的处理。 假设你确实需要对每个请求赞成大于10次的内部重定向,可以增大这个值。
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})
|
如下给出几个完整的样例供各位參考:
1、防盗链功能
仅仅这四行就实现了防盗链是否是很是奇妙^_^,编写起来是否是又认为复杂。
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
2、网址规范化
这个是把所有二级域名都重定向到www.yourdomain.com的样例,现在看来是否是很是easy了?
Options +FollowSymLinks
rewriteEngine on
rewriteCond %{http_host} ^yourdomain.com [NC]
rewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]
3、暂时错误页面
当你的站点在升级、改动的时候,你最好让訪客转到指定的页面,而不是没作完的页面或者是错误页。
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123.123.123.123
RewriteRule $ /error.html [R=302,L]
4、重定向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
以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’标记.
强制当前URL为被禁止的,即,立刻反馈一个HTTP响应代码403(被禁止的)。 使用这个标记,可以连接若干RewriteConds以有条件地堵塞某些URL。
强制当前URL为已废弃的。即。立刻反馈一个HTTP响应代码410(已废弃的)。 使用这个标记,可以标明页面已经被废弃而不存在了.
此标记使替换成分被内部地强制为代理请求,并立刻(即, 重写规则处理立刻中断)把处理移交给代理模块。
你必须确保此替换串是一个有效的(比方常见的以 http://hostname开头的)可以为Apache代理模块所处理的URI。
使用这个标记,可以把某些远程成分映射到本地server名称空间, 从而加强了ProxyPass指令的功能。 注意: 要使用这个功能,代理模块必须编译在Apacheserver中。 假设你不能肯定,可以检查“httpd -l”的输出中是否有mod_proxy.c。 假设有,则mod_rewrite可以使用这个功能; 假设没有,则必须启用mod_proxy并又一次编译“httpd”程序。
立刻中止重写操做,并再也不应用其它重写规则。 它相应于Perl中的last命令或C语言中的break命令。
这个标记可以阻止当前已被重写的URL为其后继的规则所重写。 举例,使用它可以重写根路径的URL(‘/’)为实际存在的URL, 比方, ‘/e/www/’.
又一次运行重写操做(从第一个规则又一次開始). 这时再次进行处理的URL已经不是原始的URL了,而是经最后一个重写规则处理的URL。
它相应于Perl中的next命令或C语言中的continue命令。 此标记可以又一次開始重写操做,即, 立刻回到循环的头部。 但是要当心,不要制造死循环!
此标记使当前规则与下一个(其自己又可以与其后继规则相连接的。 并可以如此重复的)规则相连接。 它产生这样一个效果: 假设一个规则被匹配,通常会继续处理其后继规则。 即。这个标记不起做用;假设规则不能被匹配。 则其后继的连接的规则会被忽略。
比方。在运行一个外部重定向时。 对一个文件夹级规则集。你可能需要删除“.www” (此处不该该出现“.www”的)。
强制目标文件的MIME类型为MIME-type。 比方,它可以用于模拟mod_alias中的ScriptAlias指令, 之内部地强制被映射文件夹中的所有文件的MIME类型为“application/x-httpd-cgi”.
在当前请求是一个内部子请求时。此标记强制重写引擎跳过该重写规则。 比方,在mod_include试图搜索可能的文件夹默认文件(index.xxx)时, Apache会内部地产生子请求。对子请求。它不必定实用的。而且假设整个规则集都起做用, 它甚至可能会引起错误。
因此,可以用这个标记来排除某些规则。 依据你的需要遵循下面原则: 假设你使用了有CGI脚本的URL前缀。以强制它们由CGI脚本处理。 而对子请求处理的出错率(或者开销)很是高。在这样的状况下,可以使用这个标记。
它使Pattern忽略大写和小写,即, 在Pattern与当前URL匹配时。’A-Z’ 和’a-z’没有差异。
此标记强制重写引擎在已有的替换串中追加一个请求串,而不是简单的替换。 假设需要经过重写规则在请求串中添加信息。就可以使用这个标记。
此标记阻止mod_rewrite对重写结果应用常规的URI转义规则。 普通状况下,特殊字符(如’%’, ‘$’, ‘;’等)会被转义为等值的十六进制编码。 此标记可以阻止这种转义,以赞成百分号等符号出现在输出中,如: RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
可以使’/foo/zed’转向到一个安全的请求’/bar?arg=P1=zed’.
此标记强制重写引擎将内部结构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。
此标记强制重写引擎跳过当前匹配规则后继的num个规则。 它可以实现一个伪if-then-else的构造: 最后一个规则是then从句,而被跳过的skip=N个规则是else从句. (它和’chain|C’标记是不一样的!)
此标记使环境变量VAR的值为VAL, VAL可以包括可扩展的反向引用的正則表達式$N和%N。 此标记可以屡次使用以设置多个变量。
这些变量可以在其后不少状况下被间接引用,但通常是在XSSI (via or CGI (如 $ENV{‘VAR’})中。 也可以在后继的RewriteCond指令的pattern中经过%{ENV:VAR}做引用。
使用它可以从URL中剥离并记住一些信息。
它在client浏览器上设置一个cookie。 cookie的名称是NAME,其值是VAL。
domain字段是该cookie的域,比方’.apache.org’, 可选的lifetime是cookie生命期的分钟数。 可选的path是cookie的路径。
深刻阅读:http://oss.org.cn/man/newsoft/ApacheManual/mod/mod_rewrite.html
来源网址: 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
来源网址: 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是Apacheserver的一个很强大的分布式配置文件。
正确的理解和使用.htaccess文件,可以帮助咱们优化本身的server或者虚拟主机。
以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)表示忽略大写和小写。常见的还有
图片防盗链
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.123 ErrorDocument 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
来源网址: 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主机|香港主机空间|香港快速主机|新将来博客
来源网址: http://blog.csdn.net/cdefg198/article/details/6645759
2011-07-29 23:36 210人阅读 评论(0) 收藏 举报
.htaccess的主要做用就是实现url改写,也就是当浏览器经过url訪问到server某个目录时。做为主人,咱们可以来接待这个url,详细地如何接待它。就是此文件的做用。所有的訪问都是经过URL实现,因此.htaccess的做用非同小可。正因为此,因此通常地站点经过设置.htaccess。经过一个十分友好的url吸引用户进来,而后用.htaccess把用户带到需要訪问的位置。
要想使用这个强大功能,就得开启apache里面的重写模块。
前面的文章中之前讲到过windows和ubuntu开启 rewrite模块使用.htaccess 。
事实上开启模块大致的步骤都是同样的,无论是Windows和linux。
开启重写引擎 :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重写规则的条件);
推荐一个经典的教程: 正則表達式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 。
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+.)?mysite.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
RewriteEngine on
RewriteCond %{REQUEST_URI} !/upgrade.html$
RewriteCond %{REMOTE_HOST} !^24\.121\.202\.30
RewriteRule $ http://www.nbphp.com/upgrade.html [R=302,L]
# redirect from old domain to new domain
RewriteEngine On
RewriteRule ^(.*)$http://www.yourdomain.com/$1[R=301,L]
ErrorDocument 400 /errors/badrequest.html
ErrorDocument 404 http://yoursite/errors/notfound.html
ErrorDocument 401 “Authorization Required
order allow,deny
deny from 123.45.6.7
deny from 12.34.5. (整个C类地址)
allow from all
# disable directory browsing
Options All -Indexes
# serve alternate default index page
DirectoryIndex about.html
Redirect 301 /d/file.htmlhttp://www.htaccesselite.com/r/file.html
ServerSignature EMail
SetEnv SERVER_ADMINdefault@domain.com
本文章主要介绍了应用最广最有用的重写功能,记住.htaccess的权限要设置成644
原文连接: .htaccess具体解释及.htaccess參数说明