为什么Apache忽略我的重写规则?

我有一个旧的应用程序与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_rewritemod_proxy混合。 你正在运行哪个Apache版本?

你确定mod_rewrite是否正确加载?

否则,使用具有相应RewriteLogLevel的指令RewriteLog可以帮助您确定在请求页面时是否考虑了RewriteRule,以及正则expression式是否匹配。

我不知道这是否适合你的需要,但这些东西也让我发疯。 我总是试图尽可能地简化。

这似乎在我的testing中工作:
RewriteRule p=([0-9]*)$ http://appname.myserver.com/item/$1