/ 中存储网

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

2013-12-20 11:10:01 来源:IT技术网

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

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

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

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

<servlet>

<servlet-name>PageServlet</servlet-name>

<servlet-class>org.apache.roller.weblogger.ui.rendering.servlets.PageServlet</servlet-class>

<load-on-startup>5</load-on-startup>

</servlet>

这个就是将重写功能交给这个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,达不到我们二级域名的效果:

配置方式如下:

<VirtualHost *:80>

ProxyPass / http://127.0.0.1:8080/

ProxyPassReverse / http://127.0.0.1:8080/

ServerName www.domain.asia

<IfModule mod_rewrite.c>

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]

</IfModule>

</VirtualHost>

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

例子如下:

<VirtualHost *:80>

ProxyPass / http://127.0.0.1:8080/

ProxyPassReverse / http://127.0.0.1:8080/

ServerName www.domain.com

<IfModule mod_rewrite.c>

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]

</IfModule>

</VirtualHost>

这个时候,你敲击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比较安全。这块的日志量很惊人呢