|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
说说这一个月左右的学习情况和心得吧!我个人认为,既然决定了去做一件事,那就要以认真的态度去对待!既然决定来学习了,那不管当初是抱着怎样的心态来到这个培训班的,都要让自己认真的投入到学习中。 <P style="TEXT-INDENT: 2em">本文旨在供应若何用Apache重写划定规矩来处理一些罕见的URL重写办法的成绩,经由过程罕见的实例给用户一些利用重写划定规矩的根基办法和线索。 <P style="TEXT-INDENT: 2em">1、为何需求用重写划定规矩 <P style="TEXT-INDENT: 2em">网站的性命在于不休地停止更新和保护,依据营业开展的需求转移办事器停止保护、从头组织目次布局、变换URL乃至改动到新的域名等情形是常常产生的。为了让客户不会因而遭到任何影响,最好的办法就是利用Apache Rewrite Rule(重写划定规矩)。 <P style="TEXT-INDENT: 2em">2、重写划定规矩的感化局限 <P style="TEXT-INDENT: 2em">1.利用在Apache主设置装备摆设文件httpd.conf中。 <P style="TEXT-INDENT: 2em">2.利用在httpd.conf里界说的虚拟主机设置装备摆设中。 <P style="TEXT-INDENT: 2em">3.利用在根基目次的逾越设置装备摆设文件.htaccess中。 <P style="TEXT-INDENT: 2em">3、重写划定规矩的使用前提 <P style="TEXT-INDENT: 2em">当用户的Web恳求终究被导向到某台Web办事器的Apache守护历程,Apache依据设置装备摆设文件判别该恳求是主设置装备摆设仍是虚拟主机,再依据用户在阅读器中恳求的URL来婚配重写划定规矩,而且依据实践的恳求途径婚配.htaccess中的重写划定规矩,最初把恳求的内容传回给用户。该呼应能够有2种。 <P style="TEXT-INDENT: 2em">1.将恳求内容内部重定向(Redirect)到另外一个URL <P style="TEXT-INDENT: 2em">让阅读器再次以新的URL收回恳求(R=301或R=302,一时的或是永世的重定向)。 <P style="TEXT-INDENT: 2em">例如,一个网站有正轨的URL和别号URL,对别号URL停止重定向到正轨URL,或网站更换成了新的域名,则把旧的域名重定向到新的域名。 <P style="TEXT-INDENT: 2em">2.由Apache外部子恳求代办署理发生新的内容送回给客户[P,L] <P style="TEXT-INDENT: 2em">这是Apache外部依据重写后的URL,经由过程代办署理模块恳求内容并将终究内容送回给客户,客户端阅读器不用再次恳求,阅读器中的URL不会被重写,但实践内容由Apache依据重写划定规矩后的URL生成。 <P style="TEXT-INDENT: 2em">例如,在公司防火墙上运转的Apache启动这类代办署理重写划定规矩,代办署理对外部网段上的Web办事器的恳求。 <P style="TEXT-INDENT: 2em">4、重写划定规矩如何任务 <P style="TEXT-INDENT: 2em">咱们假定在编译Apache时已把mod_rewrite编译成模块,确信您的httpd.conf中有LoadModule rewrite_module libexec/mod_rewrite.so,而且在Addmodule中有Addmodule mod_rewrite.c,则可使用重写划定规矩。 <P style="TEXT-INDENT: 2em">当内部恳求抵达Apache,Apache挪用重写划定规矩中的界说来重写由用户阅读器指定恳求的URL,最初被重写的URL假如是重定向,则送交阅读器做再一次恳求;假如是代办署理则把重写后的URL交给代办署理模块恳求终究的内容(Content),最初把内容送回给阅读器。 <P style="TEXT-INDENT: 2em">5、什么时候利用.htaccess中的重写划定规矩界说 <P style="TEXT-INDENT: 2em">假设您对网站内容地点的办事器没有办理员权限,或您的网站内容放在ISP的办事器上托管,没法改写主设置装备摆设文件,然而您对Web站点内容地点的目次有写权限,则可以设置本人的.htaccess文件到达一样的目标。但您需求肯定主设置装备摆设文件中对您的网站地点的目次界说了上面的内容,不然您的.htaccess不会任务。 <P style="TEXT-INDENT: 2em">- < Directory /usr/local/apache/htdocs/www.abc.com> options indexes followsymLinks allowoverride all < /Directory >
复制代码 <P style="TEXT-INDENT: 2em">6、使用举例 <P style="TEXT-INDENT: 2em">假定Apache被编译装置在主机192.168.1.56的/usr/local/apache目次上面,同时编译了重写和代办署理模块。 <P style="TEXT-INDENT: 2em">1.埋没Apache下的某个目次,使得对该目次的任何恳求都重定向到另外一个文件 <P style="TEXT-INDENT: 2em">(1)httpd.conf的完成办法 <P style="TEXT-INDENT: 2em">咱们将上面的局部放到/usr/local/apache/conf/httpd.conf中。 <P style="TEXT-INDENT: 2em">- < Directory "/usr/local/apache/htdocs/manual/"> options Indexes followsymlinks allowoverride all rewriteengine on rewritebase / rewriterule ^(.*)$ index.html.en [R=301] < /Directory >
复制代码 <P style="TEXT-INDENT: 2em">注: “rewriteengine on”为重写引擎开关,假如设为“off”,则任何重写划定规矩界说将不被使用,该开关的另外一用途就是假如为了一时去失落重写划定规矩,可以将引擎开关设为“off”再从头启动Apache便可,不用将个中的各条重写划定规矩正文失落。 <P style="TEXT-INDENT: 2em">“rewritebase /”的感化是假如鄙人面的rewriterule界说中被重写后的局部(此处为文件名index.html.en)后面没有“/”,则标明是绝对目次,相对这个rewritebase前面的界说也就是/usr/local/apache/htdocs/index.html.en,不然,假如此处没有“rewritebase /”这一项,则被重写成http://192.168.1.56/usr/local/apache/htdocs/manual/index.html.en,明显是不准确的。 <P style="TEXT-INDENT: 2em">咱们也能够不必“rewritebase /”,而是将其改成以下局部。 <P style="TEXT-INDENT: 2em">- rewriteengine on rewriterule ^(.*)$ /index.html.en [R=301]
复制代码 <P style="TEXT-INDENT: 2em">或更改成: <P style="TEXT-INDENT: 2em">- rewriteengine on rewriterule ^(.*)$ http://192.168.1.56/index.html.en [R=301]
复制代码 <P style="TEXT-INDENT: 2em">(2).htaccess的完成办法 <P style="TEXT-INDENT: 2em">咱们将上面的局部放到httpd.conf中。 <P style="TEXT-INDENT: 2em">- < Directory "/usr/local/apache/htdocs/manual/"> options Indexes followsymlinks allowoverride all < /Directory >
复制代码 <P style="TEXT-INDENT: 2em">然后将上面的局部放到/usr/local/apache/htdocs/manual/.htaccess中。 <P style="TEXT-INDENT: 2em">- rewriteengine on rewritebase / rewriterule ^(.*)$ index.html.en [R=301]
复制代码 <P style="TEXT-INDENT: 2em">注: 对文件.htaccess所做的任何修改不需求重启动Apache。 <P style="TEXT-INDENT: 2em">您还可以使用.htaccess计划将这个manual目次重定向到用户jephe本人的主目次。 <P style="TEXT-INDENT: 2em">- rewriteengine on rewritebase /~jephe/ rewriterule ^(.*)$ $1 [R=301]
复制代码 <P style="TEXT-INDENT: 2em">如许,对manual目次下任何文件的恳求被重定向到~jephe目次下不异文件的恳求。 <P style="TEXT-INDENT: 2em">2.将http://www.username.domain.com关于username的主页恳求转换为对http://www.domain.com/username的恳求 <P style="TEXT-INDENT: 2em">关于HTTP/1.1的恳求包含一个Host: HTTP头,咱们能用上面的划定规矩集重写 <P style="TEXT-INDENT: 2em">- http://www.username.domain .com/anypath到/home/username/anypath。 rewriteengine on rewritecond %{HTTP_HOST} ^www.[^.] .host.com$ rewriterule ^(. ) %{HTTP_HOST}$1 [C] rewriterule ^www.([^.] ).host.com(.*) /home/$1$2
复制代码 <P style="TEXT-INDENT: 2em">注: “rewritecond”标明是前提重写划定规矩,当知足前面界说的前提后才会使用上面的重写划定规矩,“rewritecond”有各类变量,请查阅相干文档。 <P style="TEXT-INDENT: 2em">3.防火墙上的重写划定规矩代办署理外部网段上办事器的恳求 <P style="TEXT-INDENT: 2em">- NameVirtualhost 1.2.3.4 < Virtualhost 1.2.3.4:80 > servername www.domain.com rewriteengine on proxyrequest on rewriterule ^/(.*)$ http://192.168.1.3/$1 [P,L] < /Virtualhost >
复制代码 <P style="TEXT-INDENT: 2em">注: 当内部阅读器恳求http://www.domain.com时,将被解析到IP地址1.2.3.4,Apache交由mod_rewrite处置,转换成http://192.168.1.3/$1后再交由代办署理模块mod_proxy,失掉内容后传送回用户的阅读器。 <P style="TEXT-INDENT: 2em">4.根基事后设定的转换Map表停止重写rewritemap <P style="TEXT-INDENT: 2em">转换http://www.domain.com/{countrycode}/anypath到Map表中划定的URL,后面是虚拟主机中的界说。 <P style="TEXT-INDENT: 2em">- rewritelog /usr/local/apache/logs/rewrite.log rewriteloglevel 9 rewriteengine on proxyrequest on rewritemap sitemap txt:/usr/local/apache/conf/rewrite.map rewriterule ^/([^/] ) /(.*)$ http://%{REMOTE_HOST}::$1 [C] rewriterule (.*)::([a-z] )$ ${sitemap:$2|http://h.i.j.k/} [R=301,L]
复制代码 <P style="TEXT-INDENT: 2em">文件/usr/local/apache/conf/rewrite.map的内容以下: <P style="TEXT-INDENT: 2em">- sg http://a.b.c.d/ sh http://e.f.g.h/
复制代码 <P style="TEXT-INDENT: 2em">注: 当用户恳求http://www.domain.com/sg/anypath时被重写为http://a.b.c.d/anypath。当需求调试时请用rewritelog和 rewriteloglevel 9结合,9为最大,即失掉最多的调试信息;最小为1,暗示失掉起码的调试信息;默许为0,暗示没有调试信息。 sitemap的语法是${sitemap: LookupKey | Defaultvalue},有些书上把$写成了%是毛病的。
让好朋友来看看,嘿,看咱写的多棒,然后再在网上宣传一下。 |
|