我有一个名为names.php的页面,其中列出了年份最流行的名称。为什么当不包含URL变量时,htaccess重定向不起作用?
从今年开始,主菜单链接转到www.example.com/most-popular-names/2017。
这 “干净” 的URL被通过的.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,但这对我来说似乎是错误的/不合适的。
我代替我的这一个重写规则,现在踢一个“错误500 - 内部服务器错误”。 – user3304303
日志说什么? – ishegg
我错了,有一个错字。你的工作除了一个方面。它将$ _GET ['year']视为“/(年份)”。因此,如果网址以2017年结尾,$ _GET ['year']被视为“/ 2017”而不仅仅是“2017”。以前,它不包括“/”。我可以很容易地添加一个小功能去掉主要的斜线,但是如果有一种方法可以防止在重写代码 – user3304303