.htaccess 在htaccess中如何处理两个具有相同文件名的不同参数?

plicqrtu  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(135)

这就是我的意思使用的例子我有两种类型的链接像-

http://example.com/type.php?category=movies
http://example.com/type.php?tags=movies

我在htaccess中使用过类似这样的代码

RewriteRule ^type/([0-9a-zA-Z_-]+) type.php?category=$1 [NC,L]
RewriteRule ^type/([0-9a-zA-Z_-]+) type.php?tags=$1 [NC,L]

但仍然没有运气,第一个代码是在第一行的其他像在这种情况下,?类别只有工作和**?标签**不工作什么可能是正确的答案来解决这两个问题?

djmepvbi

djmepvbi1#

尝试从[NC,L]中删除L,因为这意味着如果.htaccess可以应用此规则,您将告诉它在此处停止重写,因此它不会执行第二行。
以下是有关标志的更多信息:[https://httpd.apache.org/docs/2.4/en/rewrite/flags.html](https://httpd.apache.org/docs/2.4/en/rewrite/flags.html%5C)

  • ”[L]标志会导致mod_rewrite停止处理规则集。在大多数上下文中,这意味着如果规则匹配,将不会处理其他规则。“*

=-=
此外,正如Chris哈斯所评论的,如果您的规则不够具体,并且第一个规则的原始URL在所有其他规则中都可以找到,那么它将始终只处理第一个规则。
下面是一个很好的例子:

RewriteRule ^([a-z0-9_]+)/([a-z0-9_]+)/([a-z0-9_]+)$ index.php?param1=$1\
RewriteRule ^([a-z0-9_]+)/([a-z0-9_]+)/([a-z0-9_]+)$ index.php?param1=$1&param2=$2\
RewriteRule ^([a-z0-9_]+)/([a-z0-9_]+)/([a-z0-9_]+)$ index.php?param1=$1&param2=$2&param3=$3\

由于第一条规则可以在其他规则中找到(此处为第二条和第三条),因此第二条和第三条规则将被视为与第一条规则“相同”,因此不执行。

相关问题