我在服务器上设置了第三方购物车,使用 PayPal 进行付款。当用户完成交易时,他们会被重定向到 URL https://example.com/?target=payment%255freturn&txn_id_name=txnId...
。正确的 URL 应该包括target=payment_return
或target=payment%5freturn
。这些 URL 可以正常工作,向客户显示发票,但 PayPal 重定向到的 URL 经过了两次 URL 编码,因此会给客户带来 404 错误。
我无法更改应用程序的逻辑以接受两次转义的 URL,因此我一直在尝试设置重定向来更正它。我尝试了以下多种变体,使用 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 标志。
如何才能让用户成功重定向到正确的 URL?
答案1
您可以尝试使用脚本语言来解决这个问题。例如,您可以执行以下操作:
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;
免责声明:我没有测试此 .htaccess 或代码,但它应该非常接近您的情况。如果rawurldecode
它不适合您的情况(但我认为是),请查看urldecode
。