如何在请求中创建不带问号 (?) 和其他不重要文本的 301 重定向到远程域?

How can I create a 301 redirect to remote domain without question marks (?) and other unimportant text in the request?

我想从 http://fubar.com/subpage.php?pageId=99
开始 并在另一个域上结束 http://newdomain.org/fubar/99

这是我的 .htaccess 顶部的内容

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} /subpage.php\?pageId=(.*)$
RewriteRule ^ http://newdomain.org/fubar/?%2 [R=301,L,NE]

这就是我得到的。

from
http://fubar.com/subpage.php?pageId=99
to
http://newdomain.org/fubar/?pageId=99

我不明白 ?%2 中 RewriteRule 末尾的 ?。我希望删除它,但最后只有 http://newdomain.org/fubar/

奖金问题,在测试这样的东西后如何重置?当我破坏东西时,我总是不得不切换浏览器和隐身模式。

THE_REQUEST 变量表示 Apache 从您的浏览器收到的原始请求,并且在执行其他重写指令后不会被覆盖。此变量的示例值为 GET /index.php?id=123 HTTP/1.1。这意味着您捕获查询参数 pageId 的正则表达式不正确,而且 %2 将始终为空,因为您只捕获一个值。

您可以使用这条规则:

RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} /subpage\.php\?pageId=([^&\s]*) [NC]
RewriteRule ^ http://newdomain.org/fubar/%1? [R=301,L,NE]

? 最终将剥离先前的查询字符串,该字符串会自动转发到新的 URL.