2017-03-07 35 views
0

我有设置以下的htaccess重写规则:重写的PayPal令牌URL

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)$ /index.php?id=$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/$ /index.php?id=$1 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)$ /index.php?id=$1&sub=$2 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)/$ /index.php?id=$1&sub=$2 [L] 

一切都很好,直到它处理支付宝真。贝宝返回成功,网址是这样的:

http://example.com/checkout/success?token=EC-33Y7337627092313R&PayerID=QFQHDF7LULQR8 

女巫导致付款为“失败”,因为在URL中-Questionmark的 - 当与& -Ampersand取代一切都很好?

解决此问题的最佳实践/重写条件是什么?

感谢您的帮助!

回答

0

您的规则正在替换查询字符串,因此您的tokenPayerID参数完全丢失。

the [QSA] flag添加到您的规则以保留查询参数。

+0

备注:您可以减少您在'.htaccess'中需要的规则数量。 'RewriteRule ^([^ /] +)/?$ /index.php?id=$1 [L]'将通过'/?'覆盖尾部斜线和非尾部斜线版本。第二套规则也可以做同样的事情。 – ceejayoz

+0

非常感谢你! – maunel