柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!
全部博文(1669)
分类: 系统运维
2012-11-29 09:56:21
2012-11-28 11:21:06| 分类: rhel_apache | 标签: |字号大中小
apache如何将一个域名自动定位到目录 有两种解决办法
首先,你的拥有一个有泛域名解析的顶级域名,例如: domain.com其次,在 httpd.conf 中打开 mod_rewrite之后,在 httpd.conf 的最后,添加以下内容:
RewriteEngine on
RewriteMap lowercase int:tolower
RewriteMap vhost txt:/usr/local/etc/apache/vhost.map
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${vhost:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1
其中的 /usr/local/etc/apache 是你的 apache 服务器配置文件所在路径,根据实际情况更改。
然后,在这个所在路径的目录下创建一个文件: vhost.map
内容为:
第一次写Apache2的RewriteRule(用于域名泛解析)
在研究了正则表达式和apache的rewrite模块之后,写了第一个rewriterule,实现的功能是:
将所有的对:
name1.name2.dom.com/someResource
的访问都定向到服务器目录:
/server/name2/name1/someResource
其中name1和someResource是可变部分。对于name1,相当于实现了三级域名的泛解析。
那么在VirtualHost块下是这么写的:
//打开重写模块,这个的好处在于不需要重写的的时候,只把on改成off就让下面的代码全部失效了,不用一句一句注释
RewriteEngine on
//判断继续下一步的条件是请求的url的服务器部分(http://之后到第一个/之前,变量名是%{HTTP_HOST})
//是不是长得像name1.name2.dom.com
RewriteCond %{HTTP_HOST} ^[^.]+\.name2\.dom\.com$
//重写访问的地址,将"/someResource"改为:"name1.name2.dom.com/someResource"
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
//再重写一次,将"name1.name2.dom.com/someResource",改写为"/server/name2/name1/someResource"
//其中每个()匹配的字符串都可以用$1这样的变量名来引用,()的定义是从左到右编号的(从1开始)
//第一个()是:([^.]+),在这里匹配的是"name1"字符串,也就相当于$1="name1"
//第二个()是:(.*),在这里匹配的是"/someSource",也就相当于$2="/someSource"
//所以重写的结果"/server/name2/$1$2"翻译出来就是"/server/name2/name1/someSource"。也就是我们的目标地址
RewriteRule ^([^.]+)\.name2\.dom\.com(.*) /server/name2/$1$2