apache rewritemap 规则,不懂,求解释

2014-08-20 15:46:56 +08:00
 csensix
RewriteMap lowercase int:tolower
RewriteMap vhost txt:/home/wwwroot/vhost.map
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1

规则如上,希望懂的能够每一行都给个解释,谢谢了。
3003 次点击
所在节点    问与答
4 条回复
csensix
2014-08-20 16:49:26 +08:00
没人知道么?
pinger
2014-08-20 20:16:15 +08:00
我不会,但是自己有玩过VPS上nginx的rewrite,我大概好像似乎明白这个意思,(应该是二级域名跳转吧),希望能对你有用~~有错误请指出。
RewriteMap lowercase int:tolower /*这句话应该是把是字母的字符都统一为小写,因为C里面的tolower是酱紫的,嗯,它应该是建立了一个类似于C里面的自定义函数,供下面调用*/
RewriteMap vhost txt:***/vhost.map /*这个是在指定目录(应该为你的apache配置目录)创建**vhost.map**这个文件,文件里面应该写你设定的二级域名跟指定目录对应关系*/
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$ /*RewriteCond的意思是执行条件,这里用到了第一次自定义的lowercase*/
RewriteCond ${vhost:%1} ^(/.*)$ /*这个RewriteCond(执行条件)用到了第二次我们自定义的vhost函数,%1的意思是上一行里面跟正则表达式 ^(.+)$匹配的小括号“()”的内容(就是你的二级域名), ${vhost:%1}就是按你vhost.map的内容进行替换,二级域名变成了目录地址*/
RewriteRule ^/(.*)$ %1/$1 /*这个就是url的rewrite功能了,%1就是目录地址,然后在url里面加进去*/

举个例子:如果你在vhost.map里面这样写(域名目录间是空格,目录可能要绝对路径,你试试):
hello.2dm.org /hello
然后访问http://hello.2dm.org时候,第一句执行条件里的SERVER_NAME就是hello.2dm.org,然后经过两个执行条件后,得到了hello.2dm.org对应的目录为/hello,经过最后那句重写后得到了2dm.org/hello
资料链接: http://www.php100.com/manual/apache2/mod/mod_rewrite.html
第一次回复,好紧张。。。
csensix
2014-08-21 09:04:38 +08:00
@pinger 谢谢回答!
看过你的回复之后,我大致明白了前面四行,就是通过vhost.map文件找到了二级域名对应的目录。但是最后一行还是不太明白,%1/$1转换成的大概不是你说的这样子的吧?
pinger
2014-08-21 15:55:16 +08:00
没错啊,$1代表后面的所有东西,比如index.php,一开始url为/index.php,最终url重写为/hello/index.php,而SERVER_NAME自始至终都是hello.2dm.org

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/128960

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX