我有一个旧的应用程序与URL的forms…
http://apps.myserver.com/appname/viewItem.akt?p=123
我正在用一个像这样的URLreplace这个旧的应用程序…
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
我testing了Rubular中的所有正则expression式,以确保它们匹配传入的请求。
我错过了什么?
如果它是相关的,旧的应用程序是运行在Tomcat下的Java应用程序,并且我有一个ProxyPass像这样设置…
(我正在显示这些行注释,因为他们是当我试图让重写规则工作。)
# ProxyPass /appname http://apps.myserver.com:8080/appname # ProxyPassReverse /appname http://apps.myserver.com:8080/appname
但是这不应该是正确的? 只要我的重写规则匹配请求,它应该正确地发送它,不应该吗?
尝试这个:
RewriteEngine on RewriteCond %{QUERY_STRING} ^p=([0-9]+)$ RewriteRule ^appname/viewItem.akt$ http://appname.myserver.com/item/%1? [R,L]
%1返回引用重写条件 ? 在replace结束时删除查询string的其余部分 但似乎你正在mod_rewrite与mod_proxy混合。 你正在运行哪个Apache版本?
你确定mod_rewrite是否正确加载?
否则,使用具有相应RewriteLogLevel的指令RewriteLog可以帮助您确定在请求页面时是否考虑了RewriteRule,以及正则expression式是否匹配。
我不知道这是否适合你的需要,但这些东西也让我发疯。 我总是试图尽可能地简化。
这似乎在我的testing中工作:
RewriteRule p=([0-9]*)$ http://appname.myserver.com/item/$1