Apache 使用.htaccess将带参数的URL重定向到带参数的URL

Apache 使用.htaccess将带参数的URL重定向到带参数的URL,apache,.htaccess,mod-rewrite,redirect,Apache,.htaccess,Mod Rewrite,Redirect,我在谷歌上搜索了一段时间,试图找出如何重定向以下url: 要创建新的URL,请执行以下操作: 其中数字1144是动态的 我已经做到了这一点,但似乎无法让它工作: RewriteRule ^old-folder/\?abc=([0-9]+)(/)?$ new/folders/\?xyz=$1 [R=301] 您无法匹配重写规则中的查询字符串 在您的文档\u ROOT/.htaccess文件中尝试此规则: RewriteEngine On RewriteBase / RewriteCond

我在谷歌上搜索了一段时间,试图找出如何重定向以下url:

要创建新的URL,请执行以下操作:

其中数字1144是动态的

我已经做到了这一点,但似乎无法让它工作:

RewriteRule ^old-folder/\?abc=([0-9]+)(/)?$ new/folders/\?xyz=$1 [R=301]

您无法匹配
重写规则
中的查询字符串

在您的
文档\u ROOT/.htaccess
文件中尝试此规则:

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} (?:^|&)abc=([^&]*) [NC]
RewriteRule ^old-folder/$ new/folders/?xyz=%1 [L,NC]

经过进一步研究,我得出了以下结论:

RewriteCond %{QUERY_STRING} ^abc=([0-9]+)$
RewriteRule ^old-folder new/folders/?xyz=%1 [L,R=301]
RewriteCond %{QUERY_STRING} ^abc=(.*)$
如果将来有人这样做,它将只与“abc”的数值匹配。如果要匹配任何内容,请将第一行替换为:

RewriteCond %{QUERY_STRING} ^abc=([0-9]+)$
RewriteRule ^old-folder new/folders/?xyz=%1 [L,R=301]
RewriteCond %{QUERY_STRING} ^abc=(.*)$
有关标志[L,R=301]的说明,请参阅apache文档:

第x次:
RewriteRule
只查看URL的路径组件–如果要检查查询字符串,必须使用
RewriteCond
…谢谢@CBroe。在我对这方面的知识非常有限的情况下,我认为只有在查询字符串中查找某个参数的特定值时,才会这样做,但我错了。我在其他网站上看到过不好的例子,如果查询字符串是动态的,那么就不使用RewriteCond。