您的位置:新葡亰496net > 奥门新萄京娱乐场 > 新葡亰496net:APACHE服务器500错误消除格局与强制

新葡亰496net:APACHE服务器500错误消除格局与强制

发布时间:2019-10-30 00:28编辑:奥门新萄京娱乐场浏览(54)

    1、简介

      Apached的重写功用,就是mod_rewrite模块作用,它是apache的一个模块。它的功效非常有力,能够操作UEnclaveL中的全部片段。

      由此我们就能够改写url,给客户提供二个简单介绍大方的url,当顾客访谈时得以通过mod_rewrite模块作用转移为真正的能源路线。通过mod_rewrite能落到实处的法力还应该有非常多,比如隐蔽真实地址、达成U奥德赛L跳转、域名跳转、防盗链、限定访谈财富类型等等。

    伪静态的产生重大是为着进步寻觅引擎的友好度,方便客户回想。日常经过正则相配来重写动态网址的UEvoqueL使其静态化。那么在Windows平台下哪些设置Apache协助U冠道L重写成效,以致哪些配置.htaccess文件来兑现伪静态呢?

    apache 模块mod_rewrite 提供了叁个遵照正则表明式深入分析器的重写引擎来实时重写U讴歌RDXL必要。 它扶植每一种完整法则能够有所不限数据的子法规以致附加条件法规的灵巧何况有力的U索罗德L操作机制。 此U昂CoraL操作能够依赖于各样测验,比如服务器变量、遭遇变量、HTTP头、时间标识,以至各个格式的用来相配U摩根Aero 8L组成都部队分的找出数据库。
     
     
    此模块能够操作U兰德景逸SUVL的装有片段(包涵路线消息部分),在劳务器级的(httpd.conf)和目录级的(. htaccess )配置都使得,还足以变动最终必要字符串。 此重写操作的结果可以是内部子管理,也能够是外表乞请的转会,以至还足以是中间代理管理。
    此间关键介绍一下RewriteCond 的规行矩步以致参数表明。RewriteCond指令定义了平整生效的尺度,即在二个RewriteRule指令此前能够有三个或多少个RewriteCond指令。 条件今后的重写准绳仅在现阶段U帕杰罗I与Pattern相配而且满意此处的规格(TestString可以与CondPattern相配)时才会起作用。
    【表明】定义重写爆发的准则
    【语法】RewriteCond TestString CondPattern [flags]
    【作用域】server config, virtual host, directory, .htaccess
    【覆盖项】FileInfo
    【状态】 扩展(E)
    【模块】mod_rewrite
    TestString是一个纯文本的字符串,不过仍为能够包罗下列可扩张的成份:
    RewriteRule反向援引 ,援用方法是:$N (0 <= N <= 9)引用当前(带有若干RewriteRule指令的)RewriteCond中的与Pattern匹配的分组成分(圆括号!)。
    RewriteCond反向援引 ,援用方法是:%N (1 <= N <= 9)引用当前多少RewriteCond条件中最后相符的原则中的分组成分(圆括号!)。
    RewriteMap扩大 ,引用方法是:${mapname:key|default} 细节请参见RewriteMap指令 。
    服务器变量 ,引用方法是:%{NAME_OF_VARIABLE} NAME_OF_VA奥迪Q5IABLE能够是下表列出的字符串之意气风发:
    HTTP头连接与伏乞   
    HTTP_USER_AGENT
    HTTP_REFERER
    HTTP_COOKIE
    HTTP_FORWARDED
    HTTP_HOST
    HTTP_PROXY_CONNECTION
    HTTP_ACCEPT     REMOTE_ADDR
    REMOTE_HOST
    REMOTE_PORT
    REMOTE_USER
    REMOTE_IDENT
    REQUEST_METHOD
    SCRIPT_FILENAME
    PATH_INFO
    QUERY_STRING
    AUTH_TYPE 
    服务器本人    日期和时间    别的
    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
    HTTPS
     
    这个变量都对应于相仿命名的HTTP MIME头、Apache服务器的C变量、Unix系统中的struct tm字段,个中的好多在此外的手册只怕CGI标准中都有表达。 此中为mod_rewrite所特有的变量如下:
    IS_SUBREQ
    如若正在处理的要求是一个子呼吁,它将蕴含字符串”true”,不然正是”false”。 模块为理解析UENCOREI中的附Gavin件,只怕会爆发子央求。
    API_VERSION
    那是正在使用中的Apache模块API(服务器和模块之间内部接口)的版本, 其定义位于include/ap_mmn.h中。 此模块API版本对应彭三源在接受的Apache的版本(比如在Apache 1.3.14的发行版中这么些值是壹玖玖柒0320:10)。 常常,对它感兴趣的是模块的开采者。
    THE_REQUEST
    那是由浏览器发送的总体的HTTP央求行(比方:”GET /index.html HTTP/1.1″)。 它不含有别的浏览器发送的别样头消息。
    REQUEST_URI
    那是在HTTP哀告行中所恳求的财富(比方上述例子中的”/index.html”)。
    REQUEST_FILENAME
    那是与伏乞相相配的完整的地头文件系统的文书路线名。
    HTTPS
    要是老是使用了SSL/TLS,它将包涵字符串”on”,不然便是”off”(无论mod_ssl 是还是不是早就加载,该变量都足以安全的应用)。
     
    别的注意事项:
    SCRIPT_FILENAME和REQUEST_FILENAME包罗的值是风流倜傥律的——即Apache服务器内部的request_rec结构中的filename字段。 第三个便是豪门都领悟的CGI变量名,而第2个则是REQUEST_URI(request_rec结构中的uri字段)的多个别本。
    新鲜格局:%{ENV:variable} ,当中的variable可以是私下情形变量。 它是因此查找Apache内部结构或许(假设没找到的话)由Apache服务器进程经过getenv()获得的。
    出奇格局:%{SSL:variable} ,此中的variable能够是八个SSL碰到变量 的名字,不论mod_ssl 模块是还是不是已经加载都足以应用(未加载时为空字符串)。 比方:%{SSL:SSL_CIPHER_USEKEYSIZE}将会被沟通为128。
    分外格局:%{HTTP:header} ,当中的header能够是任性HTTP MIME头的称呼。 它连接能够因而查找HTTP要求而博得。 比如:%{HTTP:Proxy-Connection}将被替换为Proxy-Connection:HTTP头的值。
    预设形式:%{LA-U:variable} ,variable的尾声值在举办一个中间(基于ULX570L的)子诉求后明确。 当须求选拔一个当下不解不过会在以往的进度中装置的变量的时候,就足以应用那么些办法。 比方,需求在劳动器级配置(httpd.conf文件)中遵照REMOTE_USE科雷傲变量实行重写, 就非得使用%{LA-U:REMOTE_USETiggo}。 因为此变量是由UQashqaiL重写(mod??_rewrite)步骤之后的求证手续设置的。 然而生龙活虎边,因为mod_rewrite是经过API修改步骤来兑现目录级(.htaccess文件)配置的, 而认证手续先于API更改步骤,所以能够用%{REMOTE_USER}。
    预设情势:%{LA-F:variable} ,variable的终极值在进行壹在那之中间(基于文件名的)子乞请后分明。 大超级多场地下和上述的LA-U是如出一辙的。
     
    CondPattern是规范形式,即三个应用于当下TestString实例的正则表明式。TestString将被第朝气蓬勃总括,然后再与CondPattern相称。
    在意:CondPattern是贰个perl包容的正则表明式,可是还会有多少补充:
    1、能够在Cond帕特tern串的始发使用’!'(惊叹号)来指定 不匹配 。
    2、CondPatterns有若干卓越的变种。 除了正则表明式的正经八百用法,还会有下列用法:
    ‘<CondPattern ‘(词典顺序的小于)
    将Cond帕特tern视为纯字符串,与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 ‘(对子央求存在的U福特ExplorerL)
    自己商酌TestString是不是为一个卓有功用的U安德拉L,並且能够在服务器当前的访谈控制配置下被访谈。 它选取贰个内部子央浼来做检讨,由于会回降服务器的性质,所以请严谨使用!
    只顾: 全数这一个测量检验都得以用好奇号作前缀(‘!’)以落实测量检验条件的反转。
    3、还足以在CondPattern之后追加特殊的符号[flags] 作为RewriteCond指令的第五个参数。flags是三个以逗号分隔的以下标志的列表:
    ‘nocase|NC ‘(忽略大小写)
    它使测验忽视大小写,扩充后的TestString和CondPattern中’AZ’ 和’a-z’是从未分其余。 此标志仅用于TestString和CondPattern的比较,而对文件系统和子伏乞的检讨不起效率。
    ‘ornext|O凯雷德 ‘(或下一条件)
    它以OGL450情势结合若干平整的规格,实际不是包含的AND。 规范的例证如下:
    RewriteCond %{REMOTE_HOST} ^host1.* [OR]
    RewriteCond %{REMOTE_HOST} ^host2.* [OR]
    RewriteCond %{REMOTE_HOST} ^host3.*
    RewriteRule …针对那3个主机的法规集…如若不用那几个符号,你就不得不要书写叁回口径/准则对。
    举例
    固然要按央浼头中的”User-Agent:”重写一个站点的主页,能够那样写:
    RewriteCond % { HTTP_USER_AGENT }  ^Mozilla.* RewriteRule ^/$ /homepage. max .html  [ L ]
     
    RewriteCond % { HTTP_USER_AGENT }  ^Lynx.* RewriteRule ^/$ /homepage. min .html  [ L ]
     
    RewriteRule ^/$ /homepage .std.html  [ L ]
    解释:
    万生机勃勃您利用的浏览器度和胆识别标识是’Mozilla’,则你将收获内容最大化的主页(含有Frames等等)。
    假设您使用的是(基于终端的)Lynx, 则你收获的是内容最小化的主页(不含table等等)。
    假如上述标准都不满意(使用的是别的浏览器),则你拿走的是一个正规的主页。

    Rewirte主要的效果与利益就是兑现ULX570L的跳转,它的正则表明式是基于Perl语言。可依据服务器级的(httpd.conf)和目录级的(.htaccess)二种格局。假若要想用到rewrite模块,必需先安装或加载rewrite模块。方法有两种黄金时代种是编写翻译apache的时候就直接设置rewrite模块,别黄金时代种是编写翻译apache时以DSO情势安装apache,然后再接纳源码和apxs来设置rewrite模块。那tm都以废话,反正笔者用了,那就决然是自身的服务器已经援救了,大家买服务器的时候也必定会珍视到能否扶植htaccess文件了。

    2、专门的学问流程

      mod_rewrite模块在运维时会使用多个Hook程序。

      首个是从UEvoqueL到文件名转移的Hook。当有访谈达到Apache服务器的时,服务器会确认相应主机(或设想主机),那时mod_rewrite模块就起来工作,它将会先拍卖服务器全局中mod_rewrite模块所提供的吩咐,然后依照顾客提供的吩咐展开改写。

      第3个是改过UWranglerL的Hook。在那阶段mod_rewrite模块会管理非全局的装置。举个例子,目录中的.htaccess文件中的设置。不过此时早已完毕U卡宴L的翻译(由ULX570L转变为文件名),因而是不可能在次对目录等级的U路虎极光L举行改写操作,但是moe_rewrite模块会将已翻译的UEnclaveL再度转移为U科雷傲L的情状,继续拓宽目录等第的UEnclaveL改写。(mod_rewrite模块将会使用读后乞求阶段的回叫函数重新起头一个要求的循环管理)

    Rewirte模块准绳集的管理

      当mod_rewrite在这里多少个API阶段中初始施行时,它会读取配置结构中配置好的 (只怕是在劳动运行时构建的劳动器级的,只怕是在遍历目录收集到的目录级的)准绳集,然后,运营ULANDL重写引擎来拍卖(带有一个或三个标准的)法规集。无论是服务器级的还是目录级的准则集,都以由同一个U福睿斯L重写引擎处理,只是最后结果处理不一致而已。

      准绳聚集准则的生机勃勃一是很要紧的,因为重写引擎是按黄金时代种新鲜的种种处理的:每种遍历种种准绳(RewriteRule指令),要是现身三个相称原则的平整,则大概回头遍历原来就有的法则条件(RewriteCond指令)。由于历史的案由,条件准则是置于的,所以决定流程略显冗长,细节见图-1。

    新葡亰496net 1

      可以预知,ULX570L首先与种种准则的Pattern相配,假设协作失利,mod_rewrite将立刻终止此法则的拍卖,进而管理下叁个规行矩步。假如合作成功,mod_rewrite将追寻对应的规行矩步条件,如若多个准则都未曾,则简单地用Substitution构造的新值来替换UEvoqueL,然后继续管理其余法规;可是只要条件存在,则始于壹当中间循环按其列出的顺序各个管理。对法规条件的管理有所区别:UTiggoL并不与形式展开相称,而是首先通过扩大变量、反向引用、查找映射表等步骤创设二个TestString字符串,然后用它来与Cond帕特tern相称。假使同盟失利,则整个条件集和呼应的准则失利;假若合作成功,则奉行下贰个平整直到全部条件试行达成。假如持有标准得以相配,则以Substitution替换UTiggoL,并且延续管理。(本有的援引译者:金步国)

    互联网图片:

    新葡亰496net 2

     

    一、让Apache支持URL重写

    摘自 第零空中

    依照服务器级的(httpd.conf)有两种办法,豆蔻梢头种是在httpd.conf的大局 下间接使用RewriteEngine on来开垦rewrite效用;另生机勃勃种是在某些里应用RewriteEngine on来张开rewrite功用,上边将会举例表达,需求注意的是,必得在各个virtualhost里RewriteEngine on来展开rewrite作用。否则virtualhost里未有RewriteEngine on它当中的平整也不会行之有效。此间针对的正是vps服务器的了,假若你是虚构主机,就您想动(httpd.conf)文件你也还没权力。哈

    3、U途胜L重写指令

      最简便易行的重写指令可以省略到让您不可能想像!

      只要求两步就足以做到了。第风姿浪漫使用RewriteEngine开启mod_rewrite模块作用;第二透过RewriteRule定义U昂CoraL重写准绳

           在httpd.conf中加载mod_rewrite.so组件开启Apache中的UEnclaveL重写作用。

    模块mod_rewrite 提供了二个基任宝茹则表明式深入分析器的重写引擎来实时重写UPAJEROL央浼。 它扶持每一种完整准绳能够享有不限数据的子法规以至附...

    听闻目录级的(.htaccess),要在意一点那正是必得展开此目录的FollowSymLinks属性且在.htaccess里要注解RewriteEngine on。那就根本了,日常我们买的设想主机,便是敞开那些职能的,所以你在半空中随便目录下归入那几个文件,都能够起成效的了。

      1)、U讴歌ZDXL重写指令套路

    1 ---------------------------------------------------------------
    2 RewriteEngine on   #开启mod_rewrite模块功能
    3 RewriteBase 路径     #基准URL(使用alias设置别名则需使用这个)
    4 RewriteCond TestString CondPattern [flags]      #重写条件(可以多个)
    5 RewriteRule Pattern Substitution [flags]          #重写规则
    6 ----------------------------------------------------------------
    7 #4、5行可以可以多个
    8 #按顺序一个一个执行RewriteRule([flags不终止情况下])
    9 ##以上是常用的指令,还有一些很少见的指令,需要的自己去查资料了解
    

    二、配置.htaccess文件,定义重写法则

    放五个在htaccess中使用的事例:

      2)、RewriteRule Pattern Substitution [flags]

      1、pattern是功能于这两天UEscortL的perl包容的正则表明式。当前U途锐L是指该法规生效时刻的U普拉多L的值。它也许与被号令时的U奥德赛L判若两人,因为前边只怕被其余RewriteRule或然alias指令校正过。

      2、Substitution是当UWranglerL与Pattern相配成功后。用来取代的字符串。

    • 能够对pattern反向援用$N(N=0~9),表示正则表明式中第N个括号中的内容
    • 对终极相称的RewriteCond反向援引%N(N=0~9),表示最后相配的RewriteCond第N对括号中的内容
    • 服务器变量%{VALX570NAME}
    • 映射函数调用${mapname:key|default} (通过RewriteMap指令定义映射帮衬实现)

      3、[flags],标记符,多少个则用逗号隔断。

    标识符(摘抄于互连网):

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

      以 ) 为前缀的Substitution能够强制性实践七个表面重定向。 如果code没有一点名,则发出贰个HTTP响应代码302(有时性移动)。假设急需选拔在300-400范围内的其余响应代码,只需在这里钦点那么些数值就能够, 此外,还足以应用下列符号名称之风流倜傥: temp (默许的), permanent, seeother. 用它能够把标准化的UENCOREL反馈给顾客端,如, 重写“/~”为 “/u/”,或对/u/user加上斜杠,等等。

    小心: 在采纳那么些符号时,必需保险该替换字段是七个立竿见影的UKugaL! 不然,它会指向二个没用的职位! 并且要铭记在心,此标识自己只是对UKoleosL加上 .

    forbidden|F (强制UENVISIONL为被取缔的 forbidden)

      强制当前U途观L为被明确命令禁绝的,即,立即上报二个HTTP响应代码403(被禁绝的)。使用那一个符号,能够链接若干RewriteConds以有标准化地打断有些URubiconL。

    gone|G(强制UEvoqueL为已抛弃的 gone)

      强制当前UEnclaveL为已抛弃的,即,马上上报三个HTTP响应代码410(已抛弃的)。使用这一个符号,能够申明页面已经被裁撤而不设有了.

    proxy|P (强制为代理 proxy)

      此标识使替换到分被里面地强制为代理要求,并立时(即, 重写法则管理当下暂停)把拍卖移交给代理模块。你一定要确认保障此替换串是一个得力的(比方大范围的以 进而加强了ProxyPass指令的意义。

    注意: 要使用这些效应,代理模块必需编写翻译在Apache服务器中。 要是你不可能分明,能够检查“httpd -l”的出口中是不是有mod_proxy.c。 如果有,则mod_rewrite能够动用那几个效果;若无,则必需启用mod_proxy相提并论新编写翻译“httpd”程序。

    last|L (最后二个准则 last)

      马上停下重写操作,并不再行使别的重写法则。 它对应于Perl中的last命令或C语言中的break命令。这么些符号能够阻碍当前已被重写的UENCOREL为其后继的准绳所重写。 举个例子,使用它能够重写根路线的UQashqaiL(’/’)为实在存在的USportageL, 比如, ‘/e/www/’.

    next|N (重新施行 next round)

      重新实践重写操作(从第三个准绳重新开头). 当时再度打开始拍戏卖的URubiconL已经不是原有的UEnclaveL了,而是经最后一个重写法则处理的ULX570L。它对应于Perl中的next命令或C语言中的continue命令。 此标志能够重新起先重写操作,即, 即刻回到循环的头顶。
    可是要小心,不要创设死循环!

    chain|C (与下贰个平整相链接 chained)

      此标识使当前法规与下多少个(其自己又能够与其后继准绳相链接的, 并能够这么一再的)准则相链接。 它产生如此叁个效果: 要是二个规行矩步被相称,日常会持续管理其后继准绳, 即,那么些标识不起效能;假如法则不能够被相称,则其后继的链接的规行矩步会被忽视。比方,在举行一个表面重定向时, 对一个目录级法则集,你大概要求删除“.www” (此处不应有现身“.www”的)。

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

      强制指标文件的MIME类型为MIME-type。 举个例子,它能够用于模拟mod_alias中的Script阿里as指令,以内部地强制被映射目录中的全数文件的MIME类型为“application/x-httpd-cgi”。

    nosubreq|NS (仅用于不对内部子须求举行拍卖 no internal sub-request)

      在时下号令是三个内部子恳求时,此标识强制重写引擎跳过该重写准绳。举个例子,在mod_include试图搜索或许的目录暗中认可文件(index.xxx)时, Apache会内部地产生子诉求。对子央求,它不自然有用的,并且风流洒脱旦整个法则集都起效果,它依然可能会吸引错误。所以,能够用这些标识来裁撤有个别准绳。

      根据你的供给遵照以下原则: 假诺您选取了有CGI脚本的UEvoqueL前缀,以强制它们由CGI脚本处理,而对子乞请管理的出错率(或许支付)极高,在这里种情况下,能够利用那些标志。

    nocase|NC (忽视大小写 no case)

      它使Pattern忽视大小写,即, 在Pattern与当前UTiguanL匹配时,’A-Z’ 和’a-z’无差异。

    qsappend|QSA (追加哀告串 query string append)

      此标识强制重写引擎在本来就有的替换串中扩大叁个央浼串,并非大致的轮换。借使必要通过重写法则在伸手串中加进新闻,就可以动用那几个符号。

    noescape|NE (在出口中不对URubiconI作转义 no U本田UR-VI escaping)

      此标识阻止mod_rewrite对重写结果运用常规的URubiconI转义法则。 平常情形下,特殊字符(如’%’, ‘$’, ‘;’等)会被转义为等值的十四进制编码。 此标志能够阻挡那样的转义,以允许百分号等标识出今后输出中,如:

      RewriteRule /foo/(.*) /bar?arg=P1=$1 [R,NE] 能够使’/foo/zed’转向到三个资阳的央求’/bar?arg=P1=zed’.

    passthrough|PT (移交给下叁个Computer pass through)

      此标识强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值,它只是四个小改革,使之能对来源别的U昂CoraI到文件名翻译器的 阿里as,ScriptAlias, Redirect 等一声令下的出口举办后续处理。举叁个能证明其含义的例证:假设要经过mod_rewrite的重写引擎重写/abc为/def,然后经过mod_alias使/def调换为/ghi,能够这么:

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

    Alias /def /ghi
      若是轻松了PT标识,就算mod_rewrite运作如常, 即, 作为多个用到API的UOdysseyI到文件名翻译器,它能够重写uri=/abc/…为filename=/def/…,不过,后续的mod_alias在试图作ULX570I到文件名的翻译时,则会失灵。

    注意: 借使急需混合使用不一致的包涵U奥迪Q3I到文件名翻译器的模块时, 就必需利用那么些标志。。混合使用mod_alias和mod_rewrite正是个标准的例证。

    For Apache hackers

      如若当前Apache API除了UXC90I到文件名hook之外,还也可以有贰个文件名到文件名的hook, 就无需这几个符号了! 可是,若无那样一个hook,则此标志是并世无两的解决方案。 Apache Group探究过那些标题,并在Apache 2.0 版本中会扩充这样二个hook。

    skip|S=num (跳过后继的规规矩矩 skip)

      此标记强制重写引擎跳过当前非常法规后继的num个准则。 它能够达成一个伪if-then-else的构造: 最终贰个法规是then从句,而被跳过的skip=N个准则是else从句. (它和’chain|C’标识是例外的!)

    env|E=VAHaval:VAL (设置情状变量 environment variable)

      此标识使境遇变量VAPRADO的值为VAL, VAL可以包括可扩展的反向引用的正则表明式$N和%N。 此标志能够再三运用以设置八个变量。这几个变量可以在其后多数动静下被直接引用,但平时是在XSSI (via ) or CGI (如 $ENV{’VA奇骏’})中, 也足以在后继的RewriteCond指令的pattern中通过%{ENV:VAKoleos}作援引。使用它可以从ULX570L中退出并记住一些音信。

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

      它在顾客端浏览器上设置贰个cookie。 cookie的称谓是NAME,其值是VAL。 domain字段是该cookie的域,举例’.apache.org’, 可选的lifetime是cookie生命期的分钟数,可选的path是cookie的门径。

    1、 在安顿重写法规在此以前,须求在httpd.conf中设置AllowOverride All(起码设置为AllowOverride FileInfo)让Apache能够健康的读取.htaccess 文件的原委。

    URL重定向:

    #这个是URL重定向用的,用于将不带www的域名重定向到www的域名上。 RewriteCond %{HTTP_HOST} ^(domain.com)(:80)? [NC] RewriteRule ^(.*) http://www.domain.com/$1 [R=301,L] order deny,allow
    

    重定向子目录到子域名:

    # 重定向domain.com/forums 到 bbs.domain.com RewriteCond %{REQUEST_URI} ^/forums/ RewriteRule /domain/(.*) http://bbs.domain.com/$1 [R=permanent,L]
    

    如上是有个别差相当的少的平整,带啊不知底可未来下拉,然后看看详细的讲明。

    先看看这个是什么样意思

    %{HTTP_HOST}                获得主域名(比如
    %{REQUEST_U奥德赛I}               获得除主域名之外的ULANDL部分(比方/index.php?p=12)
    %{REQUEST_FILENAME}          得到诉求的文件名

    此处有一个实例,请看图片

    假设访谈localhost/pc/tind.php,打字与印刷出如下图的结果。那大家获取上述结果

    新葡亰496net 3

    自家又选取 localhost/pc/t 测验访谈目录t下的index.php文件,打字与印刷如下图。请小心,这里运用的url是不带结尾斜杠的,那时候,当访谈时就能够自动追加上最后的“/”了。所以博得的REQUEST_U奥迪Q7I也终将是以“/”结尾的。

    新葡亰496net 4

    好了,今后大家精通了%{HTTP_HOST} 和%{REQUEST_U奥迪Q3I}是什么样看头了。

      3)、RewriteCond TestString CondPattern [flags]

      Rewritecond指令定义一条准则条件。在一条rewriterule指令前面大概会有一条恐怕多条rewritecond指令,唯有当小编模板相称成功且那些条件也满意时(即RewriteRule中的pattern相称成功),准绳条件才被应用于近期URL管理。

      1、TestString是三个纯文本的字符串

    • 能够对pattern反向援引$N(N=0~9),紧跟在RewriteCond前面包车型地铁RewriteRule正则表明式中第N个括号中的内容
    • 反向援用%N(N=0~9),表示RewriteCond中CondPattern中第N对括号中的内容
    • 服务器变量%{VAEvoqueNAME}

      2、CondPattern是基准pattern,一个采用于如今实例TestString的正则表明式。即TestString与规则pattern条件举办相称。要是相配则RewriteCond的值为汉兰达rue,反之为False

    能够动用以下特殊变量(可使用'!'完成行反革命转):

    '>CondPattern’ (大于) 将condPattern当作三个常备字符串,将它和TestString举行相比,当TestString 的字符大于CondPattern为真。

    ‘=CondPattern’ (等于) 将condPattern充任七个家常便饭字符串,将它和TestString实行相比,当TestString 与CondPattern完全相符一时候为真.假设CondPattern只是 “” (七个引号紧挨在一起) 那时需TestString 为空字符串方为真。

    ‘-d’ (是还是不是为目录) 将testString充任三个目录名,检查它是或不是存在以致是或不是是二个索引。

    ‘-f’ (是或不是是regular file) 将testString当作一个文书名,检查它是否存在以致是或不是是三个regular文件。

    ‘-s’ (是不是为长度不为0的regular文件) 将testString当作贰个文本名,检查它是否存在以致是不是是二个尺寸大于0的regular文件。

    ‘-l’ (是还是不是为symbolic link) 将testString充任一个文本名,检查它是否留存以至是还是不是是三个 symbolic link。

    ‘-F’ (通过subrequest来检查某文件是不是可访谈) 检查TestString是或不是是贰个法定的文本,并且通过服务器范围内的当下安装的访谈调整进行访谈。这些检查是经过贰当中间subrequest完毕的, 因而要求小心使用那么些效用以减少服务器的品质。

    ‘-U’ (通过subrequest来检查某些U奥迪Q5L是或不是留存) 检查TestString是或不是是多少个官方的U安德拉L,并且经过服务器范围内的当下安装的访谈调节实行访问。那些检查是因此三个中间subrequest达成的, 因此需求小心使用这一个效应以减少服务器的个性。

       3、[flags]是第八个参数,多少个标记之间用逗号隔绝

    ’nocase|NC’ (不区分朗朗上口写)   在强盛后的TestString和CondPattern中,比较时不区分文本的大大小小写。注意,那个标记对文件系统和subrequest检查并未有影响.

    ’ornext|OR’ (创立与下一个尺度的或的关系)   暗中同意的图景下,二个标准之间是AND的关联,用那个标识将波及改为O凯雷德。

     

      伪静态的发出重假如为着提升搜索引擎的友好度,方便客商记念。日常通过正则匹配来重写动态网址的UPRADOL使其静态化。那么在Windows平台下怎么设置Apache支持UEscortL重写功用,以致怎么样配置.htaccess文件来落到实处伪静态呢?

    接下去大家询问一下五个调换方法RewriteCond和RewriteRule

    RewriteCond指令定义了平整生效的原则,且在一个RewriteRule指令之前能够有三个或七个RewriteCond指令。 条件之后的重写法规RewriteRule仅在近期U帕杰罗I与Pattern相配並且满足此处的口径(TestString能够与CondPattern相称)时才会起效果。

    说是RewriteCond和RewriteRule是成组使用的,此中RewriteCond可认为八个。RewriteCond来钦赐相配的规格,RewriteRule来钦点满足条件的式将实行这种转变。前边叁个称为条件,前者称为准则。

    一至七个原则加一条准则组合成贰个U大切诺基L重写法则。如:

    RewriteCond %{HTTP_HOST} ^www.zzz.com RewriteCond %{REQUEST_URI} !^user.php$ RewriteCond %{REQUEST_URI} .php$ RewriteRule (.*).php$ http://www.zzz.com/$1/ [R]
    

    以地点代码举行批注,八个指令的采取格式如下。

    【表达】定义重写发生的尺度
    【语法】RewriteCond TestString CondPattern [flags]

    【表达】定义重写的平整
    【语法】RewriteRule CondPattern rewritePattern [flags]

    TestString是要合营的对象变量,CondPattern是相称条 件,rewritePattern 是重写准绳,flags是增添准绳标志。

    以第一句【RewriteCond %{HTTP_HOST} ^www.zzz.com】

    分析:%{HTTP_HOST}作为 TestString对象,代表的是诉求主域名地点。【^www.zzz.com】,作为CondPattern 是指向TestString对象开展的尺度合作,这里是表示以www.zzz.com开始的情趣。

    以【RewriteRule (.*).php$ [R]】来分析:

    【(.*).php$】作为CondPattern,是指向以上四个尺码非常之后的UPRADOL实行标准挑选,表示其他生龙活虎.php结尾的 U凯雷德L。【

    好了,来拜谒这个标识都以什么意思

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

    以 ) 为前缀的Substitution能够强制性推行八个外界重定向。 就算code未有一点点名,则发出三个HTTP响应代码302(一时性移动)。 假使急需采纳在300-400限定内的其余响应代码,只需在这里内定那个数值就能够, 其它,还足以采纳下列符号名称之风姿洒脱: temp (暗中认可的), permanent, seeother. 用它能够把标准化的U景逸SUVL反馈给顾客端,如, 重写“/~”为 “/u/”,或对/u/user加上斜杠,等等。

    只顾: 在使用那些标志时,必需确认保证该替换字段是三个低价的URL! 不然,它会指向贰个没用的职位! 况兼要铭记在心,此标记本身只是对U奥迪Q5L加上 平日,你会希望甘休重写操作而及时重定向,则还亟需接受’L’标志.

    forbidden|F (强制U奥迪Q3L为被取缔的 forbidden)

    强制当前U宝马X5L为被明确命令禁绝的,即,立即上报贰个HTTP响应代码403(被取缔的)。 使用这些符号,能够链接若干RewriteConds以有规范化地打断有个别U奥迪Q5L。

    gone|G’(强制U福睿斯L为已放任的 gone)

    强制当前U科雷傲L为已吐弃的,即,马上上报叁个HTTP响应代码410(已放任的)。 使用这一个符号,能够申明页面已经被撤除而子虚乌有了.

    proxy|P (强制为代理 proxy)

    此标识使替换来分被里面地强制为代理央求,并立 即(即, 重写准则管理及时暂停)把拍卖移交给代理模块。 你一定要确认保证此替换串是一个卓有成效的(比方大面积的以 使用那一个符号,能够把一些远程成分映射到本地服务器名称空间, 进而巩固了ProxyPass指令的意义。

    小心: 要使用那些效能,代理模块必得编写翻译在Apache服务器中。 假如您不能分明,能够检查“httpd -l”的输出中是不是有mod_proxy.c。 如果有,则mod_rewrite能够动用这么些功用; 若无,则必需启用mod_proxy并再度编写翻译“httpd”程序。

    last|L (最终贰个平整 last)

    马上终止重写操作,并不再选取其余重写准则。 它对应于Perl中的last命令或C语言中的break命令。 那几个符号能够阻碍当前已被重写的UKoleosL为其后继的平整所重写。 例如,使用它能够重写根路线的ULANDL(’/’)为实际存在的URL, 譬喻, ‘/e/www/’.

    next|N (重新执行 next round)

    重复实行重写操作(从第三个法则重新在这里在此以前). 这时候再度实行拍卖的ULX570L已经不是固有的UCRUISERL了,而是经最后三个重写法则管理的U奥迪Q5L。 它对应于Perl中的next命令或C语言中的continue命令。 此标志可以重复起头重写操作,即, 立刻回到循环的头顶。
    可是要小心,不要创立死循环!

    chain|C (与下三个平整相链接 chained)

    此标识使近日准绳与下贰个(其自己又有什么不可与其后 继准则相链接的, 并能够那样屡屡的)准绳相链接。 它发出如此多少个效果与利益: 假设贰个法规被匹配,通常会三回九转处理其后继法规, 即,那一个标志不起成效;借使法规无法被相配, 则其后继的链接的条条框框会被忽视。比方,在进行三个表面重定向时, 对三个目录级法则集,你可能须要删除“.www” (此处不应该现身“.www”的)。

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

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

    nosubreq|NS (仅用于不对内部子须求实行拍卖 no internal sub-request)

    在现阶段恳请是贰个内部子央浼时,此标识强制重写 引擎跳过该重写准绳。 比方,在mod_include试图找出只怕的目录默许文件(index.xxx)时, Apache会内部地发生子恳求。对子央求,它不分明有用的,何况假诺全勤法规集都起效果, 它照旧恐怕会抓住错误。所以,能够用这么些符号来消释某个准绳。

    据书上说你的内需据守以下法规: 要是您利用了有CGI脚本的U大切诺基L前缀,以强制它们由CGI脚本管理, 而对子须求管理的出错率(或然开荒)相当高,在此种情况下,可以利用那些标识。

    nocase|NC (忽视大小写 no case)

    它使Pattern忽视大小写,即, 在Pattern与当下U福特ExplorerL般配时,’A-Z’ 和’a-z’没有分别。

    qsappend|QSA (追加要求串 query string append)

    此标记强制重写引擎在本来就有的替换串中扩大三个央求串,并不是简约的更迭。 假诺须要经过重写准则在伏乞串中追加音信,就足以接收这么些符号。

    noescape|NE (在出口中不对ULacrosseI作转义 no U索罗德I escaping)

    此标识阻止mod_rewrite对重写结果运用常规的U大切诺基I转义法规。 日常意况下,特殊字符(如’%’, ‘$’, ‘;’等)会被转义为等值的十八进制编码。 此标识能够阻止这样的转义,以允许百分号等标识出未来出口中,如:

    RewriteRule /foo/(.*) /bar?arg=P1=$1 [R,NE] 能够使’/foo/zed’转向到一个巴中的央求’/bar?arg=P1=zed’.

    passthrough|PT (移交给下一个管理器 pass through)

    此标记强制重写引擎将内部结构 request_rec中的uri字段设置为 filename字段的值,它只是三个小改进,使之能对来源别的USportageI到文件名翻译器的 Alias,Script阿里as, Redirect 等一声令下的输出举行后续管理。举贰个能注解其含义的事例: 如若要经过mod_rewrite的重写引擎重写/abc为/def, 然后经过mod_alias使/def转换为/ghi,能够那样:

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

    生龙活虎旦轻松了PT标识,即使mod_rewrite运作如常, 即, 作为一个利用API的U君越I到文件名翻译器, 它能够重写uri=/abc/…为filename=/def/…, 但是,后续的mod_alias在图谋作U奥迪Q5I到文件名的翻译时,则会失效。

    小心: 如若需求混合使用差异的包罗UCRUISERI到文件名翻译器的模块时, 就不得不运用这一个符号。。 混合使用mod_alias和mod_rewrite便是个杰出的例子。

    For Apache hackers

    只要当前Apache API除了U本田UR-VI到文件名hook之外,还会有三个文书名到文件名的hook, 就无需那么些符号了! 可是,若是没犹如此四个hook,则此标记是独占鳌头的应用方案。 Apache Group研讨过那几个难点,并在Apache 2.0 版本中会扩大那样贰个hook。

    skip|S=num (跳过后继的准绳 skip)

    此标识强制重写引擎跳过当前合作法规后继的num个法则。 它能够落成三个伪if-then-else的布局: 最后二个准则是then从句,而被跳过的skip=N个准绳是else从句. (它和’chain|C’标志是差别的!)

    env|E=VA奥迪Q5:VAL (设置意况变量 environment variable)

    此标记使意况变量VAPAJERO的值为VAL, VAL能够包罗可扩充的反向援用的正则表明式$N和%N。 此标志可以再三选用以设置三个变量。 这一个变量能够在其后比比较多情况下被直接援用,但平时是在XSSI (via ) or CGI (如 $ENV{’VA冠道’})中, 也得以在后继的RewriteCond指令的pattern中通过%{ENV:VA帕杰罗}作援用。 使用它能够从U福睿斯L中退出并记住一些消息。

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

    它在顾客端浏览器上设置多个cookie。 cookie的名号是NAME,其值是VAL。 domain字段是该cookie的域,比方’.apache.org’, 可选的lifetime是cookie生命期的分钟数, 可选的path是cookie的门路。

      4)、Rewrite时服务器变量(仅列出少数)

    HTTP headers:HTTP_USER_AGENT,  HTTP_REFERER,  HTTP_COOKIE,  HTTP_HOST,  HTTP_ACCEPT

    connection & request:REMOTE_ADDR,  QUERY_STRING

    server internals::DOCUMENT_ROOT,  SERVER_PORT,  SERVER_PROTOCOL

    system stuff: TIME_YEAR,  TIME_MON,  TIME_DAY

     

    一、让Apache支持URL重写

    RewriteRule一声令下格式

    【表达】定义重写的平整
    【语法】RewriteRule Pattern rewritePattern [flags]

    RewriteRule指令,能够定义一条重写 准则,法则间的逐少年老成极度首要。对Apache1.2及以后的本子,模板(Pattern)是三个POSIX正则式,用以相称当前的URL。当前的UPAJEROL不 一定是开始时代提交的UCR-VL,因为大概用部分准绳在这里准绳前黄金时代度对U奇骏L进行了拍卖。rewritePattern 大多数稿子写为Substitution ,这里为了更领会的认知故写为rewritePattern 。

    “.” ——————- 换行符以外的持有字符
    “w” —————- 相称字母或数字或下划线或汉字
    “s” —————– 相称大肆的空白符
    “d” —————– 匹配数字
    “b” —————– 相配单词的启幕或终止
    “^” —————— 相配字符串的先导
    “$” —————— 相称字符串的利落
    “*” —————— 重复零次或更频仍
    “ ” —————— 重复贰遍或更频仍
    “?” ——————- 重复零次或一遍
    “{n}” —————- 重复n次
    “{n,}” ————— 重复n次或更频仍
    “{n,m}” ————- 重复n到m次
    “[0-9]” ————– 匹配单个数字

    来交给多个实际的事例吗

    RewriteRule index.html index.php 比如:http://www.andelse.cn/index.html -> http://www.andelse.cn/index.php RewriteRule ^test([0-9]*).html$ test.php?id=$1 比如:http://www.andelse.cn/test8.html -> http://www.andelse.cn/test.php?id=8 RewriteRule ^cat-([0-9] )-([0-9] ).html$ cat.php?id1=$1&id2=$2 比如:http://www.andelse.cn/cat-1-3.html -> http://www.andelse.cn/cat.php?id1=1&id2=3 RewriteRule ^cat-([a-zA-Z0-9-]*)-([0-9] )-([0-9] ).html$ cat.php?id0=$1&id1=$2&id2=$3 比如:http://www.andelse.cn/cat-zbc2ac-3-5.html -> http://www.andelse.cn/cat.php?id0=zbc2ac&id1=3&id2=5 RewriteRule ^cat1-([0-9] )-([0-9] )-([0-9] ).html$ cat1.php?id1=$1&id2=$2&id3=$3 比如:http://www.andelse.cn/cat1-4-3-8.html -> http://www.andelse.cn/cat1.php?id1=4&id2=3&id3=8 RewriteRule ^cat([0-9]*)/$ cat.php?id1=$1 比如:http://www.andelse.cn/cat5/ -> http://www.andelse.cn/cat.php?id1=5 RewriteRule ^catm([0-9]*)/([0-9]*)/$ catm.php?id1=$1&id2=$2 比如:http://www.andelse.cn/catm6/3/ -> http://www.andelse.cn/catm.php?id1=6&id2=3
    

    说起底再看看看rewriteCond指令吧,就如顺序有标题,不影响阅读了....

      5)、轻便正则表明式法规

    . 相称任何单字符

    [chars] 相配字符串:chars

    [^chars] 不相称字符串:chars

    text1|text2 可采用的字符串:text1或text2

    ? 匹配0到1个字符

    * 相配0到八个字符

    相配1到多少个字符

    ^ 字符串开首标记

    $ 字符串结束标识

    n 转义符标识

     【注意】:一代Apache渴求UCRUISERL有斜杠而二代Apache却不允许,因而利用 ^/?

     

           在httpd.conf中加载mod_rewrite.so组件开启Apache中的ULX570L重写成效。

    RewriteCond指令格式

    【表明】定义重写发生的标准
    【语法】RewriteCond TestString CondPattern [flags]

    RewriteCond指令定义一条法规条件。在一条RewriteRule指令后面大概会有一条或多条RewriteCond指令,只有当RewriteCond的基准(CondPattern)匹配成功时,RewriteRule的重写准绳才被利用于当下URL管理。

    4、例子深入解析

    例1(轻便例子):

    (在.htaccess里实行规章制度重写)

    RewriteEngine ON 
    RewriteRule  ^user/(w )/?$user.php?id=$1
    

    ^:输入的起来  以user/最早央浼的地点

    (w ):提取全体的假名,传给$1

    /?:可选斜杠

    $:结束符

    替换为:user.php?id=*

    留意:有些apache(具体哪些版本忘啦)差别盟简写情势 w => [a-zA-Z_-]

     例2(禁绝IE和Opera浏览器拜谒):

    RewriteEngine on
    RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^Opera [NC]
    RewriteRule ^.* - [F,L]       #'-'表示不替换URL
    

    例3(不合规渠道重临首页):

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    

    例4(防盗链):

    RewriteEngine On
    RewriteCond %{HTTP_REFERER} !^http://(. .)?mysite.com/ [NC]       #判断请求的是否是自己的域名
    RewriteCond %{HTTP_REFERER} !^$                     #{HTTP_REFERER}不为空
    RewriteRule .*.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]      #返回警告图片
    

    例5(改动访问UENVISIONL目录名):

    即潜伏真实的目录名字

    RewriteEngine On
    RewriteRule ^/?old_dir/([a-z.] )$  new_dir/$1 [R=301,L]
    #new_dir为真正目录
    

    例6(成立无文件后缀链接):

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME}.php -f #判断该后缀文件是否存在
    RewriteRule ^/?([a-zA-Z0-9] )$ $1.php [L]
    RewriteCond %{REQUEST_FILENAME}.html -f #判断该后缀文件是否存在
    RewriteRule ^/?([a-zA-Z0-9] )$ $1.html [L]
    

    例7(约束只可以展现图片):

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME}  !^.*.(gif|jpg|jpeg|png|swf)$
    RewriteRule .*$ - [F,L]
    

    例8(文件不真实重定向404):

    RewriteEngine on
    RewriteCond  %{REQUEST_FILENAME}  !f
    RewriteCond  %{REQUEST_FILENAME}  !d
    RewriteRule .? /404.php [L]
    

     

     (以上是团结的片段眼光与总计,若有欠缺或许失实之处请各位提议)

    作者:那一叶随风

    宣示:以上只表示自个儿在劳作学习中某不时间内总结的思想或结论。转发时请在篇章页面鲜明地方给出原来的书文链接

     

    二、配置.htaccess文件,定义重写准绳

    TestString是贰个纯文本的字符串,除了包涵普通的字符外,还足以回顾下列的变量结构扩大:

    RewriteMap扩展:引用方法是:${mapname:key|default} 细节请参见RewriteMap指令 。

    TestString能够分包服务器变量 ,引用方法是:%{NAME_OF_VARIABLE}

    NAME_OF_VARIABLE能够是下表列出的字符串之意气风发:

    HTTP头连接与请求 服务器自身 日期和时间 其它
    HTTP_USER_AGENT DOCUMENT_ROOT TIME_YEAR API_VERSION
    HTTP_REFERER SERVER_ADMIN TIME_MON THE_REQUEST
    HTTP_COOKIE SERVER_NAME TIME_DAY REQUEST_URI
    HTTP_FORWARDED SERVER_ADDR TIME_HOUR REQUEST_FILENAME
    HTTP_HOST SERVER_PORT TIME_MIN IS_SUBREQ
    HTTP_PROXY_CONNECTION SERVER_PROTOCOL TIME_SEC HTTPS
    HTTP_ACCEPT SERVER_SOFTWARE TIME_WDAY  
    REMOTE_ADDR   TIME  
    REMOTE_HOST      
    REMOTE_PORT      
    REMOTE_USER      
    REMOTE_IDENT      
    REQUEST_METHOD      
    SCRIPT_FILENAME      
    PATH_INFO      
    QUERY_STRING      
    AUTH_TYPE      

    这一个变量都对应于雷同命名的HTTP MIME头、Apache服务器的C变量、Unix系统中的struct tm字段,此中的超越1/4在此外的手册可能CGI标准中都有证实。 当中有mod_rewrite所特有的变量如下:

    IS_SUBREQ

    若果正在处理的央浼是二个子央浼,它将富含字符串”true”,不然就是”false”。 模块为了拆解解析UEscortI中的附Gavin件,恐怕会发生子央求。

    API_VERSION

    那是正值利用中的Apache模块API(服务 器和模块之间内部接口)的本子, 其定义位于include/ap_mmn.h中。 此模块API版本对应叶昭君在使用的Apache的版本(比方在Apache 1.3.14的发行版中这么些值是19970320:10)。 经常,对它感兴趣的是模块的开辟者。

    THE_REQUEST

    那是由浏览器发送的完好的HTTP诉求行(比如:”GET /index.html HTTP/1.1″)。 它不蕴涵其余浏览器发送的别样头音信。

    REQUEST_URI

    那是在HTTP要求行中所乞求的财富(譬喻上述例子中的”/index.html”)。

    REQUEST_FILENAME

    那是与诉求相相称的总体的地面文件系统的公文路线名。

    HTTPS

    要是老是使用了SSL/TLS,它将含有字符串”on”,不然正是”off”(无论mod_ssl 是不是早就加载,该变量都能够安全的应用)。

    别的注意事项:

    SCRIPT_FILENAME和 REQUEST_FILENAME包罗的值是千篇风流倜傥律的——即Apache服务器内部的request_rec结构中的 filename字段。 第三个便是我们都晓得的CGI变量名,而第4个则是REQUEST_URI(request_rec结构中的uri字段)的三个别本。

    1. 非同一般格局:%{ENV:variable} ,此中的variable能够是随意景况变量。 它是由此查找Apache内部结构大概(假如没找到的话)由Apache服务器进度经过getenv()得到的。
    2. 特别规格局:%{SSL:variable} ,此中的variable能够是三个SSL情形变量 的名字,无论mod_ssl 模块是否曾经加载都得以利用(未加载时为空字符串)。 比方:%{SSL:SSL_CIPHER_USEKEYSIZE}将会被互换为128。
    3. 奇怪格局:%{HTTP:header} ,个中的header能够是任性HTTP MIME头的称谓。 它连接能够透过搜寻HTTP乞请而获得。 比方:%{HTTP:Proxy-Connection}将被轮换为Proxy-Connection:HTTP头的值。
    4. 预设方式:%{LA-U:variable} ,variable的最终值在施行一个之中(基于URAV4L的)子诉求后明确。 当需求使用一个当下目不识丁可是会在事后的经过中装置的变量的时候,就能够使用那些法子。 举例,要求在劳动器级配置(httpd.conf文件)中依照REMOTE_USE凯雷德变量实行重写, 就亟须使用%{LA-U:REMOTE_USE大切诺基}。 因为此变量是由U奥迪Q7L重写(mod??_rewrite)步骤之后的表明手续设置的。 然而单向,因为mod_rewrite是由此API修改步骤来促成目录级(.htaccess文件)配置的, 而认证手续先于API校正步骤,所以能够用%{REMOTE_USER}。
    5. 预设方式:%{LA-F:variable} ,variable的末尾值在试行三个里面(基于文件名的)子央求后鲜明。 大许多气象下和上述的LA-U是如出风华正茂辙的。

    1、 在布置重写准绳以前,要求在httpd.conf中设置AllowOverride All(最少设置为AllowOverride FileInfo)让Apache能够经常的读取.htaccess 文件的开始和结果。

    ●CondPattern是基准形式,即八个使用于当下TestString实例的正则表明式。TestString将被第后生可畏计算,然后再与CondPattern匹配。

    在意:CondPattern是七个perl宽容的正则表明式,可是还也有多少补充:

    1、能够在CondPattern串的起头使用”!’(惊叹号)来指定 不匹配 。
    2、CondPatterns有多少非同小可的变种。 除了正则表明式的正经八百用法,还会有下列用法:

    “<CondPattern”————-(词典顺序的小于)

    将CondPattern视为纯字符串,与TestString按词典顺序举行比较。 若是TestString小于CondPattern则为真。
    “>CondPattern”————-(词典顺序的过量)

    将CondPattern视为纯字符串,与TestString按词典顺序实行比较。 如果TestString大于Cond帕特tern则为真。
    “=CondPattern”————-(词典顺序的也正是)

    将CondPattern视为纯字符串,与TestString按词典顺序进行相比。 借使TestString等于Cond帕特tern(多个字符串每一个字符地完全相等)则为真。

    若果Cond帕特tern是”"—(多少个双引号),则TestString将与空字符串进行比较。
    “-d”————-(目录)

    将TestString视为二个渠道名并测量检验它是或不是为叁个留存的目录。
    “-f “————-(常规文件)

    将TestString视为八个门路名并测量试验它是还是不是为二个留存的健康文件。
    “-s “————-(非空的符合规律化文件)

    将TestString视为三个渠道名并测量检验它是还是不是为一个设有的、尺寸大于0的常规文件。
    “-l “————-(符号连接)

    将TestString视为一个门路名并测量检验它是还是不是为三个存在的号子连接。
    “-x “————-(可执行)

    将TestString视为二个路线名并测量检验它是不是为二个存在的、具备可进行权限的文本。 该权限由操作系统一检查测。
    “-F “————-(对子诉求存在的文本)

    自己评论TestString是或不是为叁个管用的文本,何况能够在服务器当前的访谈调节配置下被访谈。 它采纳二个内部子恳求来做检查,由于会减低服务器的性质,所以请小心运用!
    “-U “————-(对子乞请存在的UCR-VL)

    检查TestString是或不是为二个得力的UCRUISERL,并且能够在服务器当前的访谈调控配置下被访谈。 它使用二个内部子央浼来做检查,由于会下滑服务器的习性,所以请严慎接受!
    注意: 全数那些测量试验都得以用好奇号作前缀(“!”)以完毕测试条件的反转。

    也许正如混乱,不过那些只怕是最能找到本人想要的东西了。希望对大家有用...

    这个你势必喜欢

    <Directory />
        Options FollowSymLinks
        AllowOverride FileInfo
    </Directory>
    
    • 1
    • 2
    • 3
    • 4

    2、在.htaccess中定义重写准绳。

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^([A-Za-z_] )$ index.php?m=$1
    
    • 1
    • 2
    • 3
    • 4

    RewriteEngine on打开rewrite功能

    RewriteCond指令格式

    • 语法: 新葡亰496net:APACHE服务器500错误消除格局与强制跳转,UPAJEROL重写准则。RewriteCond TestString CondPattern [flags]
    • 生效域: server config, virtual host, directory, .htaccess
    • RewriteCond一声令下定义一条准绳条件。在一条RewriteRule指令前边恐怕会有一条或多条RewriteCond指令,独有当小编的模版(pattern)相称成功且那些条件也满足时准则才被使用于当下ULANDL管理。
    • TestString是一个纯文本的字符串,除了包括普通的字符外,还是可以够包蕴下列的可扩充结构: 
      • $N:RewriteRule后向援用,此中(0 <= N <= 9) 。$N援引紧跟在RewriteCond前面包车型大巴RewriteRule中模板中的括号中的模板在现阶段UENVISIONL中非常的数量。
      • %N:RewriteCond后向援用,当中(0 <= N <= 9) 。%N引用最终叁个RewriteCond的模板中的括号中的模板在那个时候此刻UPAJEROL中相称的数量。
      • ${mapname:key|default}:RewriteMap扩展。
    • CondPattern是原则pattern,即三个行使于当下实例TestString的正则表明式,即TestString将会被总计然后与CondPattern相配。作为一个正规的扩张正则式,CondPattern有以下补充:

      • 能够在模板串前扩充二个!前缀,以用表示不相称模板。但实际不是负有的test都得以加!前缀。
      • CondPattern中可以使用以下特殊变量: 
        • >CondPattern(大于) 将condPattern当作贰个日常字符串,将它和TestString进行相比,当TestString 的字符大于CondPattern为真。
        • =CondPattern(等于) 将condPattern当做八个见惯司空字符串,将它和TestString进行相比较,当TestString 与Cond帕特tern完全相同时为真.假设CondPattern只是”“(七个引号紧挨在联合签字) 当时需TestString 为空字符串方为真。
        • -d(是不是为目录) 将testString当作多少个目录名,检查它是还是不是存在以致是还是不是是贰个索引。
        • -f (是否是regular file) 将testString当做三个文书名,检查它是或不是存在甚至是不是是贰个regular文件。
        • -s (是不是为长度不为0的regular文件) 将testString当做三个文本名,检查它是不是留存以致是或不是是三个长度大于0的regular文件。
        • -l (是否为symbolic link) 将testString当作一个文书名,检查它是还是不是留存以至是不是是二个symbolic link。
        • -F(通过subrequest来检查某文件是或不是可访谈) 检查TestString是或不是是三个法定的文本,并且通过服务器范围内的一时设置的访问调控进行寻访。那几个检查是通过叁在那之中间subrequest达成的, 由此须要小心使用那一个作用以减弱服务器的品质。
        • -U (通过subrequest来检查某些UTucsonL是还是不是存在) 检查TestString是还是不是是三个法定的U卡宴L,并且经过服务器范围内的一时设置的访谈调控实行访谈。这几个检查是通过一个里头subrequest达成的, 因而必要小心使用那个意义以减少服务器的性格。
    • [flags]是首个参数,几个标记之间用逗号分隔。

      • nocase|NC (不区分朗朗上口写) 在强大后的TestString和CondPattern中,相比时不区分文本的轻重缓急写。注意,那几个标记对文件系统和subrequest检查并未有影响。
      • ornext|ORubicon(创建与下一个尺码的或的涉嫌) 默许的景色下,一个规格之间是AND的涉嫌,用那几个标记将涉及改为O奥迪Q3。举例:

        RewriteCond %{REMOTE_HOST} ^host1.* [OR] 
        RewriteCond %{REMOTE_HOST} ^host2.* [OR] 
        RewriteCond %{REMOTE_HOST} ^host3.*
        RewriteRule … 
        
        • 1
        • 2
        • 3
        • 4

        只要未有[OR]注脚,必要写三个标准化/准绳。

    RewriteRule 指令

    • 语法: RewriteRule Pattern Substitution [flags]
    • Pattern是一个效果于当下U福特ExplorerL的相配perl的正则表明式. 这里的“当前”是指该准绳生效时的UEvoqueL的值。
    • Substitution是,当原始UPRADOL与Pattern相相配时,用以代表(或沟通)的字符串别的,Substitution还是可以扩大特殊标志[flags] 作为RewriteRule指令的第多个参数。
    • Flags是二个包罗以逗号分隔的下列标识

      • forbidden|F (强制U大切诺基L为被取缔的 forbidden) 强制当前ULANDL为被取缔的,即,马上反馈贰个HTTP响应代码403(被制止的)。使用这些标志,可以链接若干RewriteConds以有标准化地打断有些URubiconL。
      • gone|G(强制U福睿斯L为已遗弃的 gone) 强制当前UCR-VL为已吐弃的,即,立时反馈多少个HTTP响应代码410(已吐弃的)。使用那么些标识,能够申明页面已经被舍弃而一纸空文了.
      • proxy|P (强制为代理 proxy) 此标志使替换来分被里面地强制为代理诉求,并立时(重写法规管理当下暂停)把拍卖移交给代理模块。你必需保障此替换串是多少个有效的(例如大面积的以 http://hostname初步的)可以为Apache代理模块所管理的UCR-VI。使用那么些符号,能够把一些远程成分映射到地面服务器名称空间,进而加强了ProxyPass指令的功能。(注意: 要使用那些意义,代理模块必须编写翻译在Apache服务器中。假诺你不可能鲜明,能够检查“httpd -l”的出口中是不是有mod_proxy.c。如果有,则mod_rewrite能够行使这一个意义;若无,则必得启用mod_proxy并再一次编写翻译“httpd”程序。)
      • last|L (最终叁个准绳last) 立时停下重写操作,并不再行使其余重写法则。它对应于Perl中的last命令或C语言中的break命令。这些符号能够阻止当前已被重写的UTiggoL为其后继的中规中矩所重写。比如,使用它能够重写根路线的U帕杰罗L(’/’)为实在存在的UCRUISERL, 例如, ‘/e/www/’。

      • next|N (重新实施 next round) 重新实施重写操作(从第1个准绳重新早先). 那时再度进行拍卖的U奥德赛L已经不是土生土长的U本田CR-VL了,而是经最后八个重写准绳管理的U奥迪Q5L。它对应于Perl中的next命令或C语言中的continue命令。 此标识能够另行初步重写操作,即, 即刻回到循环的头顶。可是要小心,不要创建死循环!

      • chain|C (与下三个平整相链接 chained) 此标志使当前准则与下贰个(其本人又能够与其后继法则相链接的, 并能够这么屡次的)法则相链接。 它发出如此五个成效: 借使贰个法规被相称,日常会三回九转管理其后继准绳, 即,那么些标志不起成效;假若准绳不可能被相配,则其后继的链接的准绳会被忽视。比方,在实行一个外表重定向时, 对四个目录级法则集,你可能供给删除“.www” (此处不该现身“.www”的)。

      • type|T=MIME-type(强制MIME类型type) 强制指标文件的MIME类型为MIME-type 比如,它能够用于模拟mod_alias中的ScriptAlias指令,以个中地强制被映射目录中的全数文件的MIME类型为“application/x-httpd-cgi”。
      • nosubreq|NS (仅用于不对内部子央求进行管理 no internal sub-request) 在脚下号令是四个内部子央浼时,此标识强制重写引擎跳过该重写准绳。比方,在mod_include试图搜索或然的目录私下认可文件(index.xxx)时, Apache会内部地发生子央求。对子诉求,它不确定有用的,而且只要一切准绳集都起效果,它以至大概会掀起错误。所以,能够用那几个标志来淹没某个法则。依照你的内需依照以下条件: 就算您利用了有CGI脚本的U大切诺基L前缀,以强制它们由CGI脚本处理,而对子诉求管理的出错率(大概开辟)超高,在这里种景况下,能够应用那一个标识。
      • nocase|NC (忽视大小写 no case) 它使Pattern忽视大小写,即, 在帕特tern与当下U卡宴L相配时,’A-Z’ 和’a-z’未有分别。
      • qsappend|QSA (追加央浼串 query string append) 此标志强制重写引擎在本来就有的替换串中扩大贰个央求串,实际不是简约的轮换。要是急需经过重写法则在倡议串中追加消息,就足以运用那几个符号。
      • noescape|NE (在出口中不对URubiconI作转义 no URubiconI escaping) 此标识阻止mod_rewrite对重写结果使用常规的U福特ExplorerI转义法则。 日常意况下,特殊字符(如’%’, ‘$’, ‘;’等)会被转义为等值的十一进制编码。 此标识能够阻挡那样的转义,以允许百分号等标记出现在输出中,如: 
        RewriteRule /foo/(.*) /bar?arg=P1=$1 [R,NE] 能够使’/foo/zed’转向到三个辽阳的伸手’/bar?arg=P1=zed’
      • passthrough|PT (移交给下二个计算机 pass through) 此标志强制重写引擎将内部结构request_rec中的uri字段设置为 filename字段的值,它只是三个小校正,使之能对来源其余U凯雷德I到文件名翻译器的 Alias,ScriptAlias, Redirect 等一声令下的出口进行三番四遍管理。举叁个能注解其意思的例证:倘诺要经过mod_rewrite的重写引擎重写/abc为/def,然后经过mod_alias使/def调换为/ghi,能够那样:

        RewriteRule ^/abc(.*) /def$1 [PT]
        Alias /def /ghi
        
        • 1
        • 2

        生龙活虎旦轻易了PT标志,纵然mod_rewrite运作符合规律,即作为二个行使API的U中华VI到文件名翻译器,它能够重写uri=/abc/…为filename=/def/…,可是,后续的mod_alias在总计作UENVISIONI到文件名的翻译时,则会失效。

      • skip|S=num (跳过后继的法规skip) 此标志强制重写引擎跳过当前合营法规后继的num个准则。 它可以兑现多少个伪if-then-else的组织: 最终二个平整是then从句,而被跳过的skip=N个准绳是else从句. (它和’chain|C’标识是不一致的!)

      • env|E=VACRUISER:VAL (设置意况变量 environment variable) 此标识使遭遇变量VAAMG ONE的值为VAL, VAL可以分包可扩展的反向援引的正则表明式$N和%N。此标识能够频仍用到以设置多个变量。那么些变量能够在其后好多意况下被直接引用,但平时是在XSSI (via ) or CGI (如 $ENV{’VA福特Explorer’})中, 也可以在后继的RewriteCond指令的pattern中通过%{ENV:VAWrangler}作援引。使用它能够从UWranglerL中抽离并切记一些音信。

      • cookie|CO=NAME:VAL:domain[:lifetime[:path]] (设置cookie)它在顾客端浏览器上设置三个cookie。cookie的名称是NAME,其值是VAL。domain字段是该cookie的域,比如’.apache.org’, 可选的lifetime是cookie生命期的分钟数,可选的path是cookie的门路。

           别的,rewrite法规中尽管境遇普通话,非常有极大希望会现出乱码难题,因为apache在rewrite时会做一回url解码,那时候jk进行号令转发时,就不会再是编码后的字符串了。此种景况,能够在一发端就进展四次编码(encode),也许在收受央求时先用ISO-8859-1取字节流,再使用UFT-8来new String。

    三、消除网址不在根目录Apache深入解析路线出错的主题素材

    生龙活虎经网址前后相继不在根目录,那么伪静态的U翼虎L就便于出错,解决办法是布局设想主机

    1、在httpd.conf中加载httpd-vhosts.conf文件

     #Virtual hosts
    Include conf/extra/httpd-vhosts.conf
    
    • 1
    • 2

    2、在httpd-vhosts.conf文件中配备设想主机

    <VirtualHost *:80>
        ServerAdmin webmaster@dummy-host.example.com
        DocumentRoot /www/docs/dummy-host.example.com #项目路径
        ServerName dummy-host.example.com             #ServerName
        ErrorLog logs/dummy-host.example.com-error_log
        CustomLog logs/dummy-host.example.com-access_log common
    </VirtualHost>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3、在hosts中加载serverName

           由此可以看到,要经过Apache服务器完成伪静态,首先要在httpd.conf中加载mod_rewrite.so模块,然后配置RewriteRule。当然,在定义RewriteRule早前弄掌握网址动态的U路虎极光L有哪几类,要协作的静态UTucsonL的花色,本事越来越好更加快的写出适合本身网站的RewriteRule。

    本文由新葡亰496net发布于奥门新萄京娱乐场,转载请注明出处:新葡亰496net:APACHE服务器500错误消除格局与强制

    关键词: