Php htaccess用于与的链接?和非数值参数

Php htaccess用于与的链接?和非数值参数,php,apache,.htaccess,mod-rewrite,Php,Apache,.htaccess,Mod Rewrite,在.htaccess中,我有: <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^name/body/test$ http://%{HTTP_HOST}/new_name [L,R=301] #1 - OK RewriteRule ^name-450$ http://%{HTTP_HOST}/name450[L,R=301] #2 - OK RewriteRule ^name.php?

在.htaccess中,我有:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

RewriteRule ^name/body/test$ http://%{HTTP_HOST}/new_name [L,R=301] #1 - OK
RewriteRule ^name-450$ http://%{HTTP_HOST}/name450[L,R=301] #2 - OK

RewriteRule ^name.php?id=13&new_id=8$ http://%{HTTP_HOST} [L,R=301] #3 - NOT WORKING

RewriteRule ^data/others/aaa/all/bbb/all/ccc/750$ http://%{HTTP_HOST}/new_data [L,R=301] #4 - NOT WORKING
RewriteRule ^data/others/aaa/1/bbb/2/ccc/750$ http://%{HTTP_HOST}/new_data [L,R=301] #5 - OK

RewriteRule ^?num=123$ http://%{HTTP_HOST} [L,R=301] #6 - NOT WORKING
</IfModule>

为什么3、4和6不起作用?我怎样才能做到呢?

规则3和规则6最终将如下所示:

RewriteEngine On
RewriteBase /

RewriteCond %{QUERY_STRING} id=13&new_id=8
RewriteRule ^name.php$ http://%{HTTP_HOST}/? [L,R=301]

RewriteCond %{QUERY_STRING} ^num=123$
RewriteRule .* http://%{HTTP_HOST}/? [L,R=301]

规则4在我看来很好,因此只能说明您没有正确测试它。

您无法在重写模块中测试get参数。它们不是URL的一部分@arkascha那么我怎样才能重定向这些链接?你不能使用?在RewriteRule中,需要包含RewriteCond并检查%{QUERY_STRING}变量。更多@arco444你能给我看一下我的例子吗?@arkascha:“你根本无法在重写模块中测试get参数。它们不是URL的一部分!”——这在多个层面上都是错误的。当然,查询字符串是URL的一部分,但RewriteRule只测试URL的路径组件。如前所述,可以使用RewriteCond测试查询字符串。谢谢,但这会将我重定向到而不是。这将仅删除name.phpSure,请参阅更新,只需添加一个空查询字符串即可删除旧查询字符串。