私は年ごとに最も人気のある名前をリストする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を処理する可能性がありますが、それは私にとって間違っている/非効率的です。
、それが今では「Error 500を蹴ります - 内部サーバーエラー"。 – user3304303
ログには何が表示されますか? – ishegg
私は間違っていて、タイプミスがありました。 1つの側面を除いてあなたのものは動作しています。 $ _GET [年]は "/(年)"と表示されています。したがって、URLが/ 2017で終わる場合、$ _GET ['year']は「2017」ではなく「/ 2017」と見なされています。以前は「/」は含まれていませんでした。私は簡単にスラッシュを取り除くために少し機能を追加することができますが、再書き込みでそれを防ぐ方法がある場合は言及したい – user3304303