删除 URL 上的双重 URL 编码

删除 URL 上的双重 URL 编码

我在服务器上设置了第三方购物车,使用 PayPal 进行付款。当用户完成交易时,他们会被重定向到 URL https://example.com/?target=payment%255freturn&txn_id_name=txnId...。正确的 URL 应该包括target=payment_returntarget=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

相关内容