Mod-Rewrite
刪除 URL 上的雙重 URL 編碼
我在我的伺服器上設置了一個第三方購物車,使用 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?
您可以嘗試使用腳本語言來解決此問題。例如,您可以執行以下操作:
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
.