首页 > 解决方案 > Apache HTTP 服务器重定向到端口 8085 IF url 包含“演示” ELSE 重定向到端口 8080

问题描述

我有 2 个应用程序在端口 8080 和 8085 上运行。两者都有不同的 URL 查询/路径,端口 8085 上的应用程序在其所有 URL 查询/路径上都有关键字demo,而其他没有。所以它作为一个唯一的标识符

我可以对/etc/httpd/conf/httpd.conf文件进行任何更改,以便如果服务器将demo标识为关键字,则请求将到达端口 8085 上的应用程序,否则请求将到达端口 8080 上的端口应用程序?

如果有办法,请提供进入 httpd.conf 文件的示例配置

编辑1:

在尝试了以下前两个答案后,我无法做到这一点。我不知道 ProxyPass 和 ProxyPassReverse 是否不允许实现这一点。我尝试评论它们,将它们添加到 VirtualHost 等中。但没有帮助。

这是我们期望的流程:用户将点击 URL(不提及端口)https://example.com/demo,这将被路由到8085其他路由到的端口上的应用程序8080

可能正在查看我的完整 httpd.conf 可能会有所帮助

链接到我的 httpd.conf - https://gofile.io/d/tWIHvX

标签: apacheredirectrouteshttpd.conf

解决方案


如果查询字符串包含单词“demo”,则重写条件:

<VirtualHost *:8080>          
    <Directory /var/www/example/>
        Allow From All
        RewriteEngine On
        RewriteCond %{SERVER_PORT} !^8085$
        RewriteCond %{QUERY_STRING} (demo)
        RewriteRule ^Demo http://%{HTTP_HOST}:%{SERVER_PORT}/$1 [L,R]
    </Directory>
</VirtualHost>

如果查询字符串不包含单词“demo”,则重写条件:

<VirtualHost *:8085>          
    <Directory /var/www/example/>
        Allow From All
        RewriteEngine On
        RewriteCond %{SERVER_PORT} !^8080$
        RewriteCond %{QUERY_STRING} (!demo)
        RewriteRule ^Demo http://%{HTTP_HOST}:%{SERVER_PORT}/$1 [L,R]
    </Directory>
</VirtualHost>

如果 SERVER_PORT 不起作用,请直接尝试如下端口:

RewriteRule ^Demo http://%{HTTP_HOST}:8085/$1 [L,R]

推荐阅读