我试图找出如何用可选部分在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;
所以我想要从年开始的可选部分,但如果有人用年份和其他语句写地址我想接受它。
谢谢你的帮助!
答案 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。