可选的url部分rewriterule

时间:2013-07-30 23:30:46

标签: regex .htaccess mod-rewrite url-rewriting

我试图找出如何用可选部分在htaccess中编写rewriterule。通常我有这个:

RewriteRule ^([a-z\-]+)/([A-Za-z\-]+)/([A-Za-z\-]+)/([0-9]+)/([0-9]+)/([0-9]+)\-([A-Za-z0-9\-]+)$ /system.php?lang=$1&category=$2&subcategory=$3&year=$4&month=$5&id=$6&title=$7 [QSA,L]

如果我有地址,它可以正常工作。

http://dev.example.com/en/blog/usa/2013/9/1-title-of-post

结果是:

$_GET["lang"]="en"; 
$_GET["category"]="blog";
$_GET["subcategory"]="usa";
$_GET["year"]=2013;
$_GET["month"]=9;
$_GET["id"]=1;
$_GET["title"]="title-of-post";

但有时我只想使用地址:

http://dev.example.com/en/about/me

我想要这个:(我的意思是不定义其他值,但服务器找到该地址)

$_GET["lang"]="en"; 
$_GET["category"]="about";
$_GET["subcategory"]="me";
$_GET["year"]=null;
$_GET["month"]=null;
$_GET["id"]=null;
$_GET["title"]=null;

所以我想要从年开始的可选部分,但如果有人用年份和其他语句写地址我想接受它。

谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

根据新信息,我想我明白你要做什么。我相信这会奏效:

RewriteRule ^([a-z\-]+)/([A-Za-z\-]+)/([A-Za-z\-]+)(/([0-9]+)/([0-9]+)/([0-9]+)-([A-Za-z0-9\-]+))?$ /system.php?lang=$1&category=$2&subcategory=$3&year=$5&month=$6&id=$7&title=$8 [QSA,L]

请注意匹配变量中的更改数字( $ 1 等)。你需要一个一次性匹配组来使第二部分可选,所以编号会跳过一个。年份现在 $ 5 ,之后的所有内容都会变为1。