На моем сервере настроена сторонняя корзина покупок, использующая PayPal для платежей. Когда пользователь завершает транзакцию, он перенаправляется на URL-адрес https://example.com/?target=payment%255freturn&txn_id_name=txnId...
. Правильный URL-адрес должен включать target=payment_return
или target=payment%5freturn
. Эти URL-адреса работают правильно, представляя клиенту счет-фактуру, но URL-адрес, на который перенаправляет PayPal, дважды закодирован, поэтому клиент получает ошибку 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?
Вы можете попробовать использовать язык сценариев, чтобы исправить это. Например, вы можете сделать что-то вроде следующего:
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
.