求apache的rewrite规则
发布网友
发布时间:2022-04-12 19:41
我来回答
共2个回答
懂视网
时间:2022-04-13 00:02
今天在做一个站点的企业黄页时,权衡之下觉得使用rewrite来实现每个企业的黄页比较的好. 一个企业在管理界面填写信息之后,就在其相应目录生成相关文件. 演示如下: [code:1:32b836f8d4] Rewriteengine on rewritecond %{HTTP_HOST} ^[^.]+.yp.oursite.cn$ re
今天在做一个站点的企业黄页时,权衡之下觉得使用rewrite来实现每个企业的黄页比较的好.
一个企业在管理界面填写信息之后,就在其相应目录生成相关文件.
演示如下:
[code:1:32b836f8d4]
Rewriteengine on
rewritecond %{HTTP_HOST} ^[^.]+.yp.oursite.cn$
rewriterule ^(.+) %{HTTP_HOST}$1 [C]
rewriterule ^([^.]+).yp.oursite.cn(.*) "/$1$2"
ErrorLog logs/oursite-error_log
CustomLog logs/oursite-access_log common
DocumentRoot "/data/oursite/yp"
ServerName yp.oursite.cn
[/code:1:32b836f8d4]
特别要注意的是:[color=red:32b836f8d4]rewriterule ^([^.]+).yp.oursite.cn(.*) "/$1$2"[/color:32b836f8d4]
一开始的时候,我设置的是: "/data/oursite/yp/$1$2"
我想既然我指定的是/开始的目录,她就应该从/开始算目录啦.
结果nnnn测谁都不成功,仔细观察了error信息,总算发现,原来这个目录是要叠加
DocumentRoot的,也就是以DocumentRoot为基准目录.
我想好多人没有成功,可能这个原因也许拌了一下.
热心网友
时间:2022-04-12 21:10
作为RewriteRule指令的第三个参数。 Flags是一个包含以逗号分隔的下列标记的列表:
'last|L' (最后一个规则 last)
立即停止重写操作,并不再应用其他重写规则。 它对应于Perl中的last命令或C语言中的break命令。 这个标记可以阻止当前已被重写的URL为其后继的规则所重写。 举例,使用它可以重写根路径的URL('/')为实际存在的URL, 比如, '/e/www/'.
'redirect|R [=code]' (强制重定向 redirect)
以http://thishost[:thisport]/(使新的URL成为一个URI) 为前缀的Substitution可以强制性执行一个外部重定向。 如果code没有指定,则产生一个HTTP响应代码302(临时性移动)。 如果需要使用在300-400范围内的其他响应代码,只需在此指定这个数值即可, 另外,还可以使用下列符号名称之一: temp (默认的), permanent, seeother. 用它可以把规范化的URL反馈给客户端,如, 重写``/~''为 ``/u/'',或对/u/user加上斜杠,等等。
注意: 在使用这个标记时,必须确保该替换字段是一个有效的URL! 否则,它会指向一个无效的位置! 并且要记住,此标记本身只是对URL加上 http://thishost[:thisport]/的前缀,重写操作仍然会继续。 通常,你会希望停止重写操作而立即重定向,则还需要使用'L'标记.
'nocase|NC' (忽略大小写 no case)
它使Pattern忽略大小写,即, 在Pattern与当前URL匹配时,'A-Z' 和'a-z'没有区别。
参考资料:http://www.kreny.com/docs/apache2.0/mod/mod_rewrite.html#rewriterule