我有一个名为names.php的页面,它按年份列出了最受欢迎的名字。
主菜单链接是www.example.com/most-popular-names/2017,因为它是当年。
使用此规则通过.htaccess重定向“干净”的网址:
RewriteRule ^/?most-popular-names/([^/]+)/?$ /names.php?year=$1 [L,QSA]
一切正常。但是,如果有人去:
www.example.com/most-popular-names (with no year specified)
进入404页面。它不应该去names.php吗?在names.php上我有下面的代码说明如果没有设置年份,只使用当前年份,但它是404',所以我认为它永远不会达到names.php。
$currentyear=date('Y');
if (!isset($_GET['year'])) { //if not set for some reason, default to current year
$theyear=$currentyear;
} else {
$theyear=$_GET['year'];
}
是否有更好/不同的方式来编写重写规则来处理这种情况?我可以添加一个单独的重写规则来处理“no year”URL,但这对我来说似乎是错误的/无效的。
答案 0 :(得分:2)
一种干净的方法是使用?:
使URL的变量部分可选RewriteRule ^/?most-popular-names/?([^/]+)?$ names.php?year=$1 [L,QSA]
答案 1 :(得分:0)
您需要添加另一个规则来处理它。处理带有和没有结尾斜线和没有参数的URL的东西。类似的东西:
Rewrite Rule ^/?most-popular-names[/].$ /names.php [L,QSA]