我使用PayPal在我的服务器上设置了第三方购物车进行付款。 当用户完成交易时,他们被redirect到https://example.com/?target=payment%255freturn&txn_id_name=txnId... 正确的URL应该包括target=payment_return或target=payment%5freturn 。 这些URL可以正常工作,向客户提供发票,但PayPalredirect到的URL是URL编码的两次,因此给客户一个404错误。
我不能改变应用程序的逻辑来接受两次转义的URL,所以我一直在尝试设置一个redirect来纠正它。 我已经尝试了以下使用mod_alias或mod_rewrite的众多变体:
RedirectMatch permanent (?i)^/\?target=payment%255freturn(.*) /target=payment_return$1 RewriteRule ^/\?target=payment%255freturn(.*) /target=payment_return$1 [NE]
我已经尝试了%255f,%5f和_的变体,而且我尝试了使用和不使用NE标志。
我怎样才能让用户redirect到正确的URL?
你可以尝试使用脚本语言来解决这个问题。 例如,你可以做如下的事情:
RewriteEngine on RewriteCond %{REQUEST_URI} ^/\?target=payment%255freturn.* RewriteRule (.*) unescaper.php?url=$1 [L]
然后在unescaper.php中做类似的事情:
<?php $decoded_url = rawurldecode($_GET['url']); header('Location: ' . $decoded_url); exit;
免责声明:我没有testing这个.htaccess或代码,但它应该让你非常接近。 如果rawurldecode不适合你的情况(但我认为是这样),请检查urldecode 。