为什么在不包含URL变量时htaccess重定向不起作用?

时间:2017-08-17 15:02:57

标签: php .htaccess redirect

我有一个名为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,但这对我来说似乎是错误的/无效的。

2 个答案:

答案 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]