热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

roller的url重写功能和Apache的二级域名配置

我使用端口跳转的方式部署了我的apache+tomcat,并准备对roller项目的链接进行重写。我在服务商的平台上开通了我域名的泛解析功能到我们的服务器ip上。在我配置apache的urlrewrite规则的时候发现我的二级域名重写竟然在浏览器上被跳转了。经过无数次实验后

我使用端口跳转的方式部署了我的apache+tomcat,并准备对roller项目的链接进行重写。我在服务商的平台上开通了我域名的泛解析功能到我们的服务器ip上。 

在我配置apache的urlrewrite规则的时候发现我的二级域名重写竟然在浏览器上被跳转了。经过无数次实验后发现,我所谓的隐式链接也是一个被重写的url。

 apache的mod_rewrite以为我的代理url是roller的那个重写的url

 从而我发现roller的url重写。roller的url重写弄的很隐蔽,不是我们常见的方式,使用urlrewrite.jar。而是自己编码实现的。具体的可以参考roller4中的那个web.xml文件。例如:

   
PageServlet
org.apache.roller.weblogger.ui.rendering.servlets.PageServlet
5
   

这个就是将重写功能交给这个servlet来进行了。她能将

  http://www.domain.com/roller/admin重写成

  http://admin.domain.com/roller/roller-ui/rendering/page/admin

  这样如果我们按照如下方式配置apache服务器的urlrewrite,那么最终浏览器上的链接,就是http://admin.domain.com/roller/admin,达不到我们二级域名的效果:

配置方式如下:



ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ServerName www.domain.asia

        RewriteEngine On
        RewriteLog logs/rewrite_log
        RewriteLogLevel 9
        RewriteCond %{HTTP_HOST} ^www/.domain/.com$
        RewriteRule ^/$ /%{HTTP_HOST}
        RewriteRule ^/www/.domain/.com$ /roller [P,L]
        RewriteCond %{HTTP_HOST} ^[a-z0-9/-]+/.domain/.com$
        RewriteRule ^/$ /%{HTTP_HOST}
        RewriteRule ^/([a-z0-9/-]+)/.domain/.com$ /roller/admin/$1 [P,L]


正确的配置方式是我们需要将roller重写的实际链接作为隐式链接才行。


例子如下:



ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ServerName www.domain.com

        RewriteEngine On
        RewriteLog logs/rewrite_log
        RewriteLogLevel 9
        RewriteCond %{HTTP_HOST} ^www/.domain/.com$
        RewriteRule ^/$ /%{HTTP_HOST}
        RewriteRule ^/www/.domain/.com$ /roller [P,L]
        RewriteCond %{HTTP_HOST} ^[a-z0-9/-]+/.domain/.com$
        RewriteRule ^/$ /%{HTTP_HOST}
        RewriteRule ^/([a-z0-9/-]+)/.domain/.com$ /roller/roller-ui/rendering/page/$1 [P,L]



这个时候,你敲击http://admin.domain.com ,那么浏览器的域名就不会变化了

备注:

1、上边所提到的“domain”是你的域名,admin,是我的二级域名。

2、上边所实现的功能只是一个二级域名的重定向,但是浏览器链接不变化,同时针对www这个开头的域名不做重定向。

3、本文想说明的问题就是apache的roller有自己的url重定向策略,但是这个策略和我们的apache的mod_rewrite配合要注意我们不能引用那些被roller做了urlrewrite的链接。这个会导致我们的浏览器链接不是我们想要的那种效果

4、想使用apache的http服务器的urlrewrite,请一定别忘记加载mod_rewrite模块呀

 5、开发调试的时候RewriteLogLevel 9是没啥,但是上线后设置成为0比较安全。这块的日志量很惊人呢


推荐阅读
author-avatar
宋安武_375
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有