如何在 htaccess 重写规则中捕获 GET 变量

How to catch GET variables in a htaccess Rewrite Rule

很抱歉,我无法独自摆脱这个...在成功付款后,用户将被重定向到我网站上的这个URL:

https://www.example.com/orders/?token=AAA&status=OK

我想获取令牌和状态并将它们分配给 GET 变量,但我真的做不到,这是我当前的 RewriteRule:

RewriteRule ^orders/?token=([^/]+)&status=([^/]+)$ /orders.php?lang=it&token=&result= [L]

orders.php 我有这一行:

echo "token: ".$_GET['token'];

但当然在控制台中我总是得到

PHP Notice:  Undefined index: token in /orders.php on line 3

有人可以帮我吗?

您无法使用 RewriteRule 模式 匹配查询字符串,您需要使用 RewriteCond 指令并检查 QUERY_STRING 服务器变量。但是,在这种情况下,您还必须确保禁用 MultiViews(否则将在没有任何 URL 参数的情况下调用 orders.php)。

请尝试以下操作:

# MultiViews MUST be disabled
Options -MultiViews

# Rewrite URL with query string
RewriteCond %{QUERY_STRING} ^token=([^&]+)&status=([^/]+)$
RewriteRule ^orders/$ orders.php?lang=it&token=%1&result=%2 [L]

请注意 %1%2 反向引用(与 </code> 和 <code> 相对)的使用,它们从前面 条件,相对于RewriteRule 模式.