首页 > 解决方案 > Apache 位置反向代理 URL 不起作用

问题描述

我正在尝试将 URL 与多个参数匹配并使用反向代理来加载其他一些内容,但由于某种原因Location Tag无法正常工作。

以下是我的httpd.conf文件

<Location "/tracker/">
  ProxyPass "http://website.com:8290/track.js"
  ProxyPassReverse "http://website.com:8290/track.js"
  Order allow,deny
  Allow from all
</Location>

<Location "/tracker/csc-event?p=([^\s]+)&s=([^\s]+)&v=([^\s]+)&e=([^\s]+)&c=([^\s]+)&n=([^\s]+)&f=([^\s]+)&l=([^\s]+)&i=([^\s]+)&j=([^\s]+)&k=([^\s]+)&w=([^\s]+)&h=([^\s]+)&t=([^\s]+)&x=([^\s]+)">
  ProxyPass "http://website.com:8290/csc-event?p=([^\s]+)&s=([^\s]+)&v=([^\s]+)&e=([^\s]+)&c=([^\s]+)&n=([^\s]+)&f=([^\s]+)&l=([^\s]+)&i=([^\s]+)&j=([^\s]+)&k=([^\s]+)&w=([^\s]+)&h=([^\s]+)&t=([^\s]+)&x=([^\s]+)"
  ProxyPassReverse "http://website.com:8290/csc-event?p=([^\s]+)&s=([^\s]+)&v=([^\s]+)&e=([^\s]+)&c=([^\s]+)&n=([^\s]+)&f=([^\s]+)&l=([^\s]+)&i=([^\s]+)&j=([^\s]+)&k=([^\s]+)&w=([^\s]+)&h=([^\s]+)&t=([^\s]+)&x=([^\s]+)"
  Order allow,deny
  Allow from all
</Location>

当我点击:https://website.com/tracker它工作正常但不适用于其他位置,例如如果我点击:

https://website.com/tracker/csc-event?p=0%3Ajodv6q8w%3AdO9XGf6T4SCq7kz49hEEUwNvmkqR8Wxw&s=0%3Ajodv6q8w%3AHgkFFmKSZqdBB6E2C~F8xBKTHv8CGwbl&v=0%3AJ1gADq10d3pj1JL1lh4Dd7ZlLxQyl2~_&e=0%3AJ1gADq10d3pj1JL1lh4Dd7ZlLxQyl2~_0&c=jodvqubo&n=f&f=f&l=https%3A%2F%2Fwebsite.com%2F&i=11y&j=k8&k=1&w=mj&h=i9&t=pageView&x=-e1v043

它显示page not found error. 我究竟做错了什么?正则表达式或其他配置问题是否存在问题?

标签: regexapachereverse-proxymod-proxy

解决方案


如果您想在位置指令中使用正则表达式,您应该添加波浪号 (~),但即便如此,位置也不匹配查询字符串。添加 /tracker/csc-event 作为 Location 并检查该指令内的查询字符串。

此外,proxypass 优先于查询字符串,无需添加它。


推荐阅读