lighttpd的rewrite,只能处理uri的简单rewrite,而如今web网站都比较复杂,有些uri需要经过运算或者其他复杂处理。
比如一个千万级的用户网站,url为http://user123.tld.com/test.gif,那么由于用户数量巨大,可能用户文件的目录会分为四级,如下:
/us/er/12/3/
test.gif就在这个目录下
这样http://user123.tld.com/test.gif可能必须rewrite为/us/er/12/3/test.gif
lighttpd的magnet可以做到
先下载lua安装,需要lua5.1以上
然后下载lighttpd
- tar -zxf lighttpd-1.4.18.tar.gz
- cd lighttpd-1.4.18
- export LUA_CFLAGS="-I/usr/local/include"
- export LUA_LIBS="-L/usr/local/lib -llua"
- ./configure
prefix=/usr/local/lighttpd with-magnet --with-lua
- make
- make install
然后在lighttpd配置中加入
server.modules += (
"mod_magnet"
)
magnet.attract-physical-path-to = ( "/srv/lighttpd/blog.lua" )
写脚本/srv/lighttpd/blog.lua:
- !/usr/local/bin/lua
print("Host: " .. lighty.request"Host")
print("Request-URI: " .. lighty.env"request.uri")
username1 = string.sub(lighty.request"Host",1,2)
username2 = string.sub(lighty.request"Host",3,4)
username3 = string.sub(lighty.request"Host",5,6)
username4 = string.sub(lighty.request"Host",7)
print("username1:" .. username1 )
print("username2:" .. username2 )
print("username3:" .. username3 )
file = lighty.env"physical.doc-root" .. "/" .. username1 .. "/" .. username2 .. "/" .. username3 .. "/" .. username4 .. lighty.env"request.uri"
print("file:" .. file)
attr = lighty.stat(file)
if (attr) then
lighty.content = { { filename = file } }
lighty.header"Content-Type" = "text/html"
return 200
end