我有一个domainA.com,我想将其重定向到:
domainB.com/public.php?service=shorty_relay&id=$1
因此浏览器上的输入应该是domainA.com/f7g6f87g,并且应该将后台重定向到domainB.com/public.php?service=shorty_relay&id=f7g6f87g,但是将域保留在浏览器上。
我的虚拟主机行是:
<VirtualHost *:80>
ServerAdmin email@address.com
DocumentRoot /var/www/dir
ServerName domainA.com
ServerAlias www.domainA.com
ProxyPass / https://domainB.com/public.php?service=shorty_relay&id=$1
ProxyPassMatch ^/([A-Za-z0-9]{4,12})$ https://domainB.com/public.php?service=shorty_relay&id=$1
ProxyPassReverse / https://domainB.com/public.php?service=shorty_relay&id=$1
ErrorLog /var/www/dir/error.log
</VirtualHost>
使用当前行我可以将domainA.com重定向到domainB.com的根目录。但它不是我需要的。我需要domainA.com只接受有效的ID(?service = shorty_relay&amp; id = $ 1 ) 我知道我必须结合这个正则表达式,所以我只能允许有效的id。
ProxyPassMatch ^/([A-Za-z0-9]{4,12})$ https://domainB.com/public.php?service=shorty_relay&id=$1
任何线索如何才能实现这一目标。我现在试图解决这个问题,但没有运气。
答案 0 :(得分:1)
摆脱ProxyPass
行。该行的工作方式类似于mod_alias的Redirect
指令。它表示/
自动附加到目标URL末尾后的任何内容,不包括查询字符串。这意味着$1
与此指令无关,因为您没有使用正则表达式来捕获匹配项。
您唯一需要的是ProxyPassMatch
行:
ProxyPassMatch ^/([A-Za-z0-9]{4,12})$ https://domainB.com/public.php?service=shorty_relay&id=$1
此外,您不需要在ProxyPassReverse
中包含查询字符串。该指令用于&#34;反向&#34;将从domainB.com发送的地图重定向映射到domainA.com中的匹配URL。所以这应该足够了:
ProxyPassReverse / https://domainB.com/public.php