我有一个旧的应用程序,其 URL 形式如下...
http://apps.myserver.com/appname/viewItem.akt?p=123
我正在用具有类似 URL 的应用程序替换这个旧应用程序......
http://appname.myserver.com/item/123
我尝试添加几种不同的重写规则httpd/httpd.conf
并重新启动服务器,但仍然出现 404 错误。
我尝试过几件事……
RewriteEngine on
RewriteRule ^.*viewItem.akt\?p=([0-9]*)$ http://appname.myserver.com/item/$1 [R]
或者...
RewriteRule ^/appname/viewItem.akt\?p=([0-9]*)$ http://appname.myserver.com/item/$1 [R]
结果总是“在此服务器上未找到请求的 URL /appname/viewItem.akt”,就好像重写规则不存在一样。
我在访问日志中得到的内容是......
[IP address] - - [09/Sep/2011:21:27:37 -0700] "GET /appname/viewItem.akt?p=1018 HTTP/1.0" 404 248
我测试了所有正则表达式卢布拉以确保它们与传入的请求相匹配。
我错过了什么?
如果相关的话,旧应用程序是在 Tomcat 下运行的 Java 应用程序,并且我有一个像这样设置的 ProxyPass...
(我显示这些行被注释掉了,就像我试图让重写规则起作用时那样。)
# ProxyPass /appname http://apps.myserver.com:8080/appname
# ProxyPassReverse /appname http://apps.myserver.com:8080/appname
但这应该没什么关系吧?只要我的重写规则与请求匹配,它就应该可以正确发送,不是吗?
答案1
尝试这个:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^p=([0-9]+)$
RewriteRule ^appname/viewItem.akt$ http://appname.myserver.com/item/%1? [R,L]
%1
反向引用重写条件?
在替换结束时删除查询字符串的其余部分
但看起来你搞混了mod_rewrite
。mod_proxy
你运行的是哪个 Apache 版本?
答案2
答案3
我不知道这是否适合您的需求,但这些事情也让我抓狂。我总是尽可能地简化。
这在我的测试中似乎有效:RewriteRule p=([0-9]*)$ http://appname.myserver.com/item/$1