你好ApacheMaven
我有一个第三方http web应用程序在端口8080上侦听服务器。第三方应用程序需要请求URL的格式为
http://hostname:8080/?accnum=<account number>
字符串
然而,由于遗留的集成问题,请求者web客户端以
https://hostname/oldcontext/?acc="<accountnumber>"
型
这里“oldcontext”是一个固定字符串,accountnumber是一个可变数字
为了实现请求者和第三方应用程序之间的集成-我安装了一个apache服务器,并使用apache代理和apache mod rewrite rewriterule指令来转换URL格式并在端口8080上发送
我的Apache Web服务器配置如下所示
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{QUERY_STRING} acc=([^&]+)
RewriteRule ^oldcontext/$ /?accnum=%1 [L,R=301]
RequestHeader unset Origin
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
型
我当然已经启用了必要的Apache模块,如下所示,并重新启动Apache
a2enmod rewrite
a2enmod headers
a2enmod proxy
a2enmod proxy_http
型
当我向URL发出请求的时候
http://<my hostname>/oldcontext/?acc="<account number>"
型
希望将其转换并重定向到
http://127.0.0.1:8080/?accnum=<account number>
型
但是,
我得到以下回应
{"status":404,"error":"Not Found","path":"/oldcontext/"}
型
我检查了代理程序工作正常-
我的请求
http://127.0.0.1/?accnum=<account number>
型
正确重定向到
http://127.0.0.1:8080/?accnum=<account number>
型
我得到了预期的回应
重写失败,尽管如所述
更糟糕的是,如果我包括一个catch allconfig fr URL重写如下,它仍然给我同样的错误
enter code here
<VirtualHost *:80>
RewriteEngine on
RewriteCond %{QUERY_STRING} acc=([^&]+)
# RewriteRule ^oldcontext/$ /?accnum=%1 [L,R=301]
RewriteRule ^(.*)$ /?accnum=%1 [L,R=301]
RequestHeader unset Origin
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
型
- 列表项目
我错过了什么?
谢谢你的帮助
约格什
2条答案
按热度按时间z0qdvdin1#
字符串
此规则在virtualhost上下文中永远不能匹配。第一个参数中的regex与以
/
开始的解码URL路径匹配。huwehgph2#
以下配置对我有效
从我收集到的信息来看,我基本上被卡住了,无法得到一个正确的RewriteCond,它将匹配我的URL,从而确保我的重写规则被触发。有一次,我发现我单独寻求帮助只是为了获得正确的重写条件(请参阅我的其他文章Apache mod rewrite RewriteCond regex help needed)
由于我的rewritecond不匹配的重定向是发送teh请求与“oldcontext”到新的位置,其中“oldcontext”不存在,因此404错误
一旦我在我的RewriteCond中获得了我的请求URL的模式匹配,这确保了我的重写规则被触发。我的rewriterule也不匹配,我按照https://stackoverflow.com/users/98959/covener的建议进行了更改,它将URL更改为新路径,然后一切正常
我包括完整的配置为完整起见
字符串