我有一個名爲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