.htaccess RewriteRule / Redirect基于查询字符串/参数?

时间:2016-11-05 20:59:05

标签: .htaccess mod-rewrite

如何在.htaccess中重写对此URL的调用:

www.domain.com/?_wpm_gateway=paypal-standard&_wpm_action=ipn

指向新的IPN网址(用于PayPal付款):

www.domain.com/payments/paypal/ipn

显然,IPN本身的其余参数会被传递并发送到新的URL吗?

有什么想法吗?

如果调用了这个查询/ URL,我只需要一个重写规则,否则它应该是正常的业务,可以这么说。

编辑:我试过这个,但是没有用......想法?

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} (?:^|&)_wpm_action=ipn(?:$|&)
RewriteRule ^ /payments/paypal/ipn? [NS,L,DPI,QSD]

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

1 个答案:

答案 0 :(得分:2)

你已经把它带回了前面。您告诉PayPal您的新IPN网址在您的商家设置中,或您发送的付款参数中的每笔交易。您不会从PayPal重定向传入的IPN。如果您担心错过IPN,您可以对旧版本进行静默内部重写,以便可以在不使用重定向的情况下处理

修改:从旧网址到新网址的内部重写示例。 再次修改它会在下一次传递中点击后面的规则,但您可以更快地在.htaccess

中实现
# ensure only rewrite old paypal when query has exactly right parameter
RewriteCond %{QUERY_STRING} (?:^|&)_wpm_action=ipn(?:$|&)
# should only happen on first request and allow the pretty url to be routed normally on the next pass through the rules
RewriteRule ^ payments/paypal/ipn [NS,DPI,QSD]