我有一个名为 names.php 的页面,其中按年份列出了最流行的名字。
主菜单链接为 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'ing 所以我认为它根本不会到达 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'];
}
是否有更好/不同的方法来编写重写规则来处理这种情况?我可以添加一个单独的重写规则来处理“没有年份”的 URL,但这对我来说似乎是错误的/低效的。
最佳答案
一个干净的方法是使 URL 的可变部分可选用 ?:
RewriteRule ^/?most-popular-names/?([^/]+)?$ names.php?year=$1 [L,QSA]
关于php - 为什么不包含 URL 变量时 htaccess 重定向不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45738686/