2017-08-17 85 views
3

我有一個名爲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,但這對我來說似乎是錯誤的/不合適的。

回答

2

一個乾淨的方式做到這一點的是使URL的可變部分可選的:?

RewriteRule ^/?most-popular-names/?([^/]+)?$ names.php?year=$1 [L,QSA] 
+0

我代替我的這一個重寫規則,現在踢一個「錯誤500 - 內部服務器錯誤」。 – user3304303

+0

日誌說什麼? – ishegg

+1

我錯了,有一個錯字。你的工作除了一個方面。它將$ _GET ['year']視爲「/(年份)」。因此,如果網址以2017年結尾,$ _GET ['year']被視爲「/ 2017」而不僅僅是「2017」。以前,它不包括「/」。我可以很容易地添加一個小功能去掉主要的斜線,但是如果有一種方法可以防止在重寫代碼 – user3304303

0

您需要添加其他規則來處理該問題。處理網址的地方有和沒有結尾斜線和NO PARAMS。喜歡的東西:

Rewrite Rule ^/?most-popular-names[/].$ /names.php [L,QSA] 
相關問題