0

我正在尝试找出如何在 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;

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

谢谢你的帮助!

4

1 回答 1

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等)中更改的数字。您需要一个一次性匹配组来使第二部分成为可选,因此编号会跳过一个。Year 现在是$5,之后的所有内容都移动 1。

于 2013-07-31T00:07:11.027 回答