仓酷云

标题: PHP网页设计Apache重写划定规矩的罕见使用及实例申明 [打印本页]

作者: 小女巫    时间: 2015-2-3 23:59
标题: PHP网页设计Apache重写划定规矩的罕见使用及实例申明
说说这一个月左右的学习情况和心得吧!我个人认为,既然决定了去做一件事,那就要以认真的态度去对待!既然决定来学习了,那不管当初是抱着怎样的心态来到这个培训班的,都要让自己认真的投入到学习中。   <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">
  1. < 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">
  1. < 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">
  1. rewriteengine on rewriterule ^(.*)$ /index.html.en [R=301]
复制代码
<P style="TEXT-INDENT: 2em">或更改成: <P style="TEXT-INDENT: 2em">
  1. 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">
  1. < 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">
  1. 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">
  1. 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">
  1. 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">
  1. 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">
  1. 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">
  1. 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},有些书上把$写成了%是毛病的。
让好朋友来看看,嘿,看咱写的多棒,然后再在网上宣传一下。
作者: 精灵巫婆    时间: 2015-2-4 07:54
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 兰色精灵    时间: 2015-2-5 15:46
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
作者: 小魔女    时间: 2015-2-6 16:15
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
作者: 第二个灵魂    时间: 2015-2-9 04:48
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
作者: 柔情似水    时间: 2015-2-26 22:55
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者: 乐观    时间: 2015-3-6 05:31
当然这种网站的会员费就几十块钱。
作者: 冷月葬花魂    时间: 2015-3-7 14:50
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者: 因胸联盟    时间: 2015-3-8 02:47
Ps:以上纯属原创,如有雷同,纯属巧合
作者: 海妖    时间: 2015-3-15 20:15
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
作者: 仓酷云    时间: 2015-3-20 10:35
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者: 灵魂腐蚀    时间: 2015-3-21 20:02
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
作者: 愤怒的大鸟    时间: 2015-3-23 06:52
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: 深爱那片海    时间: 2015-3-23 14:17
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
作者: 飘灵儿    时间: 2015-3-26 20:39
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
作者: 老尸    时间: 2015-3-28 01:22
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者: 蒙在股里    时间: 2015-4-10 23:59
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
作者: 谁可相欹    时间: 2015-4-12 06:01
爱上php,他也会爱上你。
作者: 小女巫    时间: 2015-4-17 22:43
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者: 活着的死人    时间: 2015-5-1 00:10
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者: 爱飞    时间: 2015-6-20 07:20
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2