Custom route with optional tokens
Short and sweet... I think you just need to add a second route.

'blog/archive' =&gt; 'controller/action/path',
'blog/archive/&lt;year:\d{4}&gt;' =&gt; 'controller/action/path'