我有一个需要修改的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次类别组合?或者我必须像上面所做的一样继续重复。
答案 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中实现相同的结果,也许有更好的方法,这只是一个例子。