2017-08-17 15 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'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']; 
} 

この状況を処理する書き換えルールを作成する方法はありますか?私は別の書き換え規則を追加して、 "no year" URLを処理する可能性がありますが、それは私にとって間違っている/非効率的です。

答えて

2

行うにはきれいな方法、それはオプションでURLの可変部分を作るです:?私はこの1つで私のRewriteRuleを置き換え

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

、それが今では「Error 500を蹴ります - 内部サーバーエラー"。 – user3304303

+0

ログには何が表示されますか? – ishegg

+1

私は間違っていて、タイプミスがありました。 1つの側面を除いてあなたのものは動作しています。 $ _GET [年]は "/(年)"と表示されています。したがって、URLが/ 2017で終わる場合、$ _GET ['year']は「2017」ではなく「/ 2017」と見なされています。以前は「/」は含まれていませんでした。私は簡単にスラッシュを取り除くために少し機能を追加することができますが、再書き込みでそれを防ぐ方法がある場合は言及したい – user3304303

0

これを処理するには別のルールを追加する必要があります。終わりのスラッシュとNO paramsの有無にかかわらずURLを処理するもの。以下のような何か:

Rewrite Rule ^/?most-popular-names[/].$ /names.php [L,QSA] 
関連する問題