作者:宋安武_375 | 来源:互联网 | 2014-05-28 10:53
我使用端口跳转的方式部署了我的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比较安全。这块的日志量很惊人呢