Php .htaccess url重写-我做错了什么?

Php .htaccess url重写-我做错了什么?,php,regex,.htaccess,mod-rewrite,Php,Regex,.htaccess,Mod Rewrite,我正在进行.htaccess URL重写。我无法详细说明以下内容: 我在两种情况之间转换 RewriteRule ^(.*)$ index.php?action=$1 RewriteRule ^(.*)/([0-9]+)/?$ index.php?action=$1&product_id=$2 在相同的示例url上使用 在我的php脚本中,我调用echo var_dump$来查看重写后的内容 我得到的第一条规则是:array1{[action]=>string9 index.php}

我正在进行.htaccess URL重写。我无法详细说明以下内容:

我在两种情况之间转换

RewriteRule ^(.*)$ index.php?action=$1

RewriteRule ^(.*)/([0-9]+)/?$ index.php?action=$1&product_id=$2
在相同的示例url上使用

在我的php脚本中,我调用echo var_dump$来查看重写后的内容

我得到的第一条规则是:array1{[action]=>string9 index.php}

第二条规则是:array2{[action]=>string8产品[product_id]=>string15}

第一条规则的错误在于,它只显示index.php,而不考虑给定的url。我相信正则表达式中的圆括号应该包含first slash products/5之后的所有内容,并将其填充到$_GET[action]字段中,以便稍后在PHP脚本中使用。为什么没有发生?第二条规则有什么不同,在这里它能像预期的那样工作


顺便说一句:第一条规则取自一篇关于漂亮URL的文章,它应该和我写的一样。但显然不是这样。

您的第一条规则重写了所有内容,也重写了服务器上的现有文件,如index.php。您应该添加条件,只重写不存在的文件和目录。或者简单地将第二条规则放在“全部捕获”规则之前,并将[L]追加到行中。看见