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

标签 php .htaccess redirect

我有一个名为 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/

相关文章:

php - 我怎样才能加快 Bootstrap 工具提示

zend-framework - 迁移Magento后的问题

apache - (还有另一种)通过.htaccess中的重写方式删除www的漂亮方法吗?

apache - htaccess 允许域只提供图像

redirect - 添加指向相同IP但不同端口的子域

python - 将标准错误重定向到日志,想要添加时间戳

Php fopen 或 fwrite 使用 unicode 创建文本

php - 如何使用 php 裁剪选定的图像并将裁剪后的图像保存到文件夹中

php - 在 php 中创建组合框时 Onchange 事件的语法

reactjs - .htaccess 机器人代理