0

我有一个需要修改的 htaccess。我的网站能够在一个 URL 中显示多个类别,以便可以同时向用户显示不同类别的项目。例如 domain.com/fans.php?cat[]=1&cat[]=2&cat[]=3

为了使这个 URL 友好,我在我的 htaccess 中添加了一行用于 1 类别,另一行用于 2 类别,另一行用于 3 类别等等。如下所示

RewriteRule ^fans/category/([a-zA-Z0-9\-]+)$ fans.php?cat=$1

以上将变为 domain.com/fans/category/1

RewriteRule ^fans/category/([a-zA-Z0-9\-]+)&([a-zA-Z0-9\-]+)$ fans.php?cat[]=$1&cat[]=$2

以上将变为 domain.com/fans/category/1&2

RewriteRule ^fans/category/([a-zA-Z0-9\-]+)&([a-zA-Z0-9\-]+)&([a-zA-Z0-9\-]+)$ fans.php?cat[]=$1&cat[]=$2&cat[]=$3

以上将变为 domain.com/fans/category/1&2&3

我的问题是,如果我需要显示 4 个类别甚至 10 个类别怎么办?有没有办法简化 htacesss 中的重写规则,允许 n 次类别组合?还是我必须像上面所做的那样不断重复。

4

1 回答 1

2

只要有足够多的可选正则表达式组,就可以有一个规则,并且空键 ( cat[]=) 不是问题。最多 3 个参数的示例:

要求:http://example.com/fans/category/1&2&3

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^fans/category/([^&]+)&?([^&]+)?&?([^&]+)?$ /fans.php?cat1=$1&cat2=$2&cat3=$3 [L,NC]

但是,当有很多参数时,使用单个重写规则将带有参数的完整 URI 路径传递给脚本会更好、更通用。像这样:

RewriteRule ^fans/category/(.*) /fans.php?$1 [L,NC]

并使用类似于此的代码获取脚本中的参数:

<?php 
$Query = $_SERVER['QUERY_STRING'];
$Parameters = explode ('&', $Query);
echo "cat1 = ". $Parameters[0] . "<br />";
echo "cat2 = ". $Parameters[1] . "<br />";
echo "cat3 = ". $Parameters[2] . "<br />";
...
?>

有几种方法可以在 php 中实现相同的结果,也许有更好的方法,这只是一个示例。

于 2013-04-21T07:30:53.687 回答