Što se drugog pitanja tiče, naravno da je tako nešto moguće, ali to je, koliko ja znam, izvodljivo jedino uz pomoć Regex rute, npr.:
routes.foobar.type = "Zend_Controller_Router_Route_Regex"
routes.foobar.route = "([a-zA-Z0-9\-\/]*)([a-zA-Z0-9\-]+)\.html"
routes.foobar.defaults.module = default
routes.foobar.defaults.controller = index
routes.foobar.defaults.action = index
routes.foobar.map.1 = foo
routes.foobar.map.2 = bar
routes.foobar.reverse = %s%s
To bi bio primer definicije takve rute u okviru ini fajla, a posle naravno bi u bootstrap-u morao da dodaš ovu konfiguraciju ruteru:
$routesConfig = new Zend_Config_Ini('/putanja/do/routres_config.ini');
Zend_Controller_Front::getInstance()->getRouter()->addConfig($routesConfig, 'routes');
Naravno, ovakvu definiciju možeš da dodaš i direktno u tvoj app config, pri čemu bi samo ispred svake stavke dodao resources.router, kako bi naglasio da inicijalizuješ Router app resurs. Ja nekako više volim da rute držim u odvojenom config fajlu.

Primetićeš da u tom prvom subpattern-u "prolazi" i znak "/", a to je upravo iz razloga što je zahtev te tvoje rute takav da je prvi deo opcion, pa nikako ne smeš kosu crtu (url separator) da imaš između ta dva parametra foo i bar, već će parametar foo, ako ga ima, pri assemble-ovanju te rute dodavati kosu crtu na kraj njegove vrednosti. To znači da ćeš pri dohvatanju vrednosti tih parametara, u okviru foo-a imati i tu dodatnu kosu crtu na kraju, a ako ti to smeta, onda istu tu rutu možeš da definišeš i ovako:
routes.foobar.route = "(?:([a-zA-Z0-9\-]+)\/)?([a-zA-Z0-9\-]+)\.html"
Nadam se da ti sintaksa regularnih izraza nije strana, pa ti je verovatno jasno zašto sam stavio ?: na početku tog prvog segmenta kojeg sam označio kao opcionog. U slučaju takve rute, reverse ruta (ona koja se koristi za assemble-ovanje) bi trebala da izgleda ovako: routes.foobar.reverse = %s/%s.
btw Sve ovo pišem iz glave, tako da mi se možda potkrala neka sintaksna/logička greška.
