apache+tomcat配置url rewrite 的怪问题

lovewindy 2007-07-24 12:42:39
在网上找了N多的配置说明,终于配起来了,
不用url rewrite都一切正常,
但是当我配了url rewrite后,如:
RewriteRule ^/a.html$ /ps/index.action?hid=a [PT]
RewriteRule ^/c.htm$ /ps/index.action?hid=a [PT]

(我项目的根目录下有a.html,但不存在c.html)
在地址栏打入localhost/a.html,直接显示a.html
打入localhost/c.html,提示找不到c.html页面

我看了RewriteLog,
127.0.0.1 - - [20/Jul/2007:14:44:22 +0800] [a.duoduo.cn/sid#77e200][rid#9ab020/initial] (2) rewrite '/c.htm' -> '/ps/index.action?hid=a'
127.0.0.1 - - [20/Jul/2007:14:44:22 +0800] [a.duoduo.cn/sid#77e200][rid#9ab020/initial] (3) split uri=/ps/index.action?hid=a -> uri=/ps/index.action, args=hid=a
127.0.0.1 - - [20/Jul/2007:14:44:22 +0800] [a.duoduo.cn/sid#77e200][rid#9ab020/initial] (2) forcing '/ps/index.action' to get passed through to next API URI-to-filename handler

按道理都已经转过去了,为什么tomcat不是去拿地址栏里的地址去显示

还有,如果我把配置改成
RewriteRule ^/a.html$ /ps/index.action?hid=a [R]
RewriteRule ^/c.htm$ /ps/index.action?hid=a [R]
会自动转向到希望的页面,但这样做就是地址栏的也会变
...全文
970 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuaike 2007-11-04
  • 打赏
  • 举报
回复
我要说的问题是怎么用apache+resin+UrlRewriteFilter(参见http://tuckey.org)实现jsp带参数
的地址半静态化。直接用apache的urlrewirte 把html转到jsp好像不可以,打开的是jsp的源文件。
然而用apache+resin+UrlRewriteFilter如果按照如下这么配置则apache总是说404找不到。
测试环境apache 是80端口,resin8080端口。
<rule>
<from>/web-[0-9]+-[0-9]+\.html</from>
<to>/abc.jsp?userid=$1&page=$2</to>
</rule>
以上配置用http://localhost:8080/web-3234-35.html 可以转到http://localhost:8080/abc.jsp?userid=3234&page=35,但是直接用http://localhost/web-3234-35.html apache确说找不到,请求根本没有转给resin。


所以我想了一个办法,url还是以jsp结束,把传给jsp的所有参数都用路径/a/b/c的形式隐藏起来,这样apache看到以
jsp结尾的url就会转给resin,通过配置resin的UrlRewirteFilter就可以实现url rewrite了。配置如下

WEB-INF/web.xml 如下:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
</filter-class>
<init-param>
<param-name>confPath</param-name>
<param-value>/WEB-INF/urlrewrite.xml</param-value>
</init-param>

<init-param>
<param-name>logLevel</param-name>
<param-value>commons</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

urlrewite.xml 内容如下:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
"http://tuckey.org/res/dtds/urlrewrite2.6.dtd">

<urlrewrite>

<rule>
<from>/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+\.jsp)</from>
<to>/$5?$1=$2&$3=$4</to>
</rule>

</urlrewrite>


测试http://localhost/userid/34/type/3/u.jsp 直接转向了http://localhost/u.jsp?userid=34&type=3,成功。

稍微修改正则表达式就可以实现多个参数传递的url“半静态化”了。


我不知道搜索引擎对jsp结尾的链接和对html/htm结尾的链接会有什么区别,至少这样实现了半静态化,并且还可以用apache的处理能力。
wolf00781 2007-08-16
  • 打赏
  • 举报
回复
兄弟解决没,
wolf00781 2007-08-16
  • 打赏
  • 举报
回复
我的也是
yangxiao_jiang 2007-07-30
  • 打赏
  • 举报
回复
和我的错误一样,不知道为什么,用[R]的形式,是可以转发的,不知道为什么[PT]就不行了。
lovewindy 2007-07-26
  • 打赏
  • 举报
回复
没人帮忙吗?
我又测试了下

<VirtualHost *:80>
ServerAdmin admin@abc.cn
DocumentRoot E:/Web
#您的站点项目所在路径,应与tomcat中的目录设置相同
ServerName www.abc.cn
ServerAlias *.abc.cn
ErrorLog logs/shsc-error_log.txt
CustomLog logs/shsc-access_log.txt common
RewriteLog logs/rewrite.log
RewriteLogLevel 3
JkMount /*.jsp ajp13
#让Apache支持对jsp传送,用以Tomcat解析
JkMount /*.action ajp13
#让Apache支持对.do传送,用以Tomcat解析
<Directory />
Options FollowSymLinks
AllowOverride All
Allow from all

</Directory>
RewriteEngine On

RewriteRule ^/c\.html$ /a.html [PT]
RewriteRule ^/e\.html$ /a.jsp [PT]
RewriteRule ^/f\.html$ /index.action [PT]

</VirtualHost>
RewriteRule中,第一句能正常执行,第二,三句都出现tomcat的404错误,
后来经过反复测试,发现原因是
JkMount /*.jsp ajp13
#让Apache支持对jsp传送,用以Tomcat解析
JkMount /*.action ajp13

我在这里加入一条
JkMount /*.htm ajp13

RewriteRule ^/g\.html$ /a.htm [PT]

a.htm文件是存在的,然后访问www.abc.com/g.html,还是提示tomcat的404错误,但是我直接通过www.abc.com/a.htm或www.abc.com/a.jsp都是正常的,

是不是我的重写错误,导致传入tomcat的地址是错误的?
但通过rewrite.log,发现我取的地址都是对的
127.0.0.1 - - [20/Jul/2007:14:44:22 +0800] [a.duoduo.cn/sid#77e200][rid#9ab020/initial] (2) forcing '/a.htm' to get passed through to next API URI-to-filename handler
shenqhy 2007-07-24
  • 打赏
  • 举报
回复
不太清楚

5,657

社区成员

发帖
与我相关
我的任务
社区描述
Web开发应用服务器相关讨论专区
社区管理员
  • 应用服务器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧