{已解决}--再次求教rewrite

{已解决}--再次求教rewrite

乔版主,及各位兄弟,由于兄弟急用,所以再次来请教了apache rewrite问题。。

目的: 博客系统泛域名解析后重定向到同一个目录就可以。

目前泛域名一切正常,问题出现在跳转到同一个目录,请看下面:

用户输入 http://任意主机名(也就是用户的注册名).blog.test.com   跳转到   http://任意主机名.blog.test.com/a/b/
如:     http://user1.blog.test.com                                         跳转到    http://user1.blog.test.com/a/b/

曾得版主指点过个方法,小弟在变化后还是没能实现:
http://user1.test.com   跳到     http://user.test.com/test.html

RewriteCond %{REQUEST_URI} !^/test\.html.*
RewriteCond %{HTTP_HOST} ^user1\.test\.com [NC]
RewriteRule ^/(.*)$  http://user1.test.com/test.html$1 [R=permanent,L]

根据上面的方法,我这样变化的,可是不行。。。

RewriteCond %{REQUEST_URI} !^/a\/b.*
RewriteCond %{HTTP_HOST} ^(.*)+\.test\.com [NC]
RewriteRule  ^/(.*)+\.test\.com$ /a/b$1

这个写法是错的,我就想让大家看得更清楚,我要实现的目的,也为了大家对我的指点。
我也在google.com在搜了,可目前自己没有找到正确方法呢,而且现在又是急用,所以再次上来求问rewrite,谢谢版主,谢谢大家了。

rewrite功能强大,我相信上面功能一定可以实现,只是本人水平有限。。

RewriteCond %{REQUEST_URI} !^/a\/b/.*
RewriteCond %{HTTP_HOST} ^[a-z0-9\-]+\.blog\.test\.com [NC]
RewriteRule ^/(.*)$ $2/space/blog/$1 [L,R]

大概想到了这样写了,普通页可以了,不过还不知道如果页面有图片和连接时会怎样,目前只有文字。
服务用的是modjk+jboss4.0.2
有图片无非就是规则稍为复杂一些,别怕。


QUOTE:
原帖由 HonestQiao 于 2007-1-31 22:07 发表
有图片无非就是规则稍为复杂一些,别怕。

真心的感谢版主的鼓励,虽然现在没有正式上线使用,不过对于图片方面测试也没有问题了。

下面这三句就可以实现了,希望可以帮助到有同样需要的兄弟,有不足的地方也请指点。

RewriteCond %{REQUEST_URI} !/[a-z]+/.*  

RewriteCond %{HTTP_HOST} ^[^&]+\.blog\.test\.com [NC]

RewriteRule ^/(.*)$ $2/a/b/$1 [L,R]

解释一下:前两句就是定义条件,如果任意一个这样的地址http://user1.blog.test.com 后面没有子路径时,才执行第三句的重写规则,重写为http://user1.test.com/a/b  而对于http://user1.blog.test.com/photo 不进行重写.


QUOTE:
原帖由 HonestQiao 于 2007-1-31 22:07 发表
有图片无非就是规则稍为复杂一些,别怕。

To 乔帮主:

RewriteCond %{REQUEST_URI} !/[a-z]+/.*  

RewriteCond %{HTTP_HOST} ^[^&]+\.blog\.test\.com [NC]

RewriteRule ^/(.*)$ $2/a/b/$1 [L,R]

通过上面的方式可以将http://user1.blog.test.com 跳到 http://user1.blog.test.com/a/b


问题:

上面的方式跳完之后地址URL为:http://user1.blog.test.com/a/b/  可是现在我希望IE地址URL还是保持为:http://user1.blog.test.com而内容为http://user1.blog.test.com/a/b/  这种方式应该叫做隐式重写或映射吧。

RewirteRule      [R] 表示强制重写URL ,可是在上面规则中如果去掉了[R] 还是不行,而且不能正常重写了,另一种方式就是用通Rewrite Base 方式。

请版主指点一下,如果实现上述功能。。。
顶一下,,
用rewrite 实现,URL地址不变的情况一下,访问到另一个页面。

请版主指点。。。
已经解决.

rewrite重写url地址后,如果希望原地址栏不发生变化,而请求的结果l是rewrite之后新的url。

解决办法:

1、重新编apache加载mod_proxy 模块
cd apache2.0
./configure --enable-MODULE=shared --enable-so --with-mpm=worker --enable-rewrite=shared --enable-proxy=shared
make && make install

之后添加下面内容这个四行内容到http.conf中。
<Proxy *>
Order deny,allow
Allow from all
</Proxy>

2、rewirte举例
RewriteCond %{HTTP_HOST} ^www\.wd\.cn [NC]
RewriteRule ^/(.*) http://www.wd.cn/space/ [P,L]
注意这个[P]参数,实际就是它在发生作用。
原理就是:通过[p]这个参数让新地址通过内部代理去访问,从而不改变URL地址栏,而这个代理使用的就是apache的mod_proxy代理模块。