在htaccess重写中重复变量

时间:2013-04-21 06:12:03

标签: .htaccess mod-rewrite

我有一个需要修改的htaccess。我的网站能够在网址中显示多个类别,以便可以同时向用户显示不同类别的项目。示例如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次类别组合?或者我必须像上面所做的一样继续重复。

1 个答案:

答案 0 :(得分: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中实现相同的结果,也许有更好的方法,这只是一个例子。