Silex routing not found
php, silex, url-routing
Solution
You wrote:
/prevendita/hello/{name}/
But requested:
/prevendita/hello/sadfasdf
You forgot the trailing slash. I think that's the problem.
Edit: According to Fabien Potencier (author of Silex):
- Each resource must have a unique URL (so `/foo/` is different from `/foo`).
- As a convenience for the end user (not the developer), when a URL must end with a `/` and if he forgets to type it, Silex redirects him to the right URL (with a `/`) instead of returning a `404`.
- When Silex generate URLs, they always use the canonical URL, so the redirection is only done when a user enter a URL manually and forget to add the trailing `/`, but it is never used by the framework itself.
Problem
I'm using Silex for first time. Everything works fine while developing locally. Once uploaded everything to production server, parametrized routes don't work anymore. Do you have any idea? Am I missing production configurations somewhere? Am I missing file permissions somewhere? I'm getting those two exceptions: ``` NotFoundHttpException: No route found for "GET /prevendita/hello/sadfasdf" in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/RouterListener.php line 92 at RouterListener->onKernelRequest(object(GetResponseEvent)) at call_user_func(array(object(RouterListener), 'onKernelRequest'), object(GetResponseEvent)) in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php line 164 at EventDispatcher->doDispatch(array(array(object(Application), 'onEarlyKernelRequest'), array(object(SessionServiceProvider), 'onEarlyKernelRequest'), array(object(RouterListener), 'onKernelRequest'), array(object(LocaleListener), 'onKernelRequest'), array(object(Application), 'onKernelRequest')), 'kernel.request', object(GetResponseEvent)) in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php line 53 at EventDispatcher->dispatch('kernel.request', object(GetResponseEvent)) in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php line 110 at HttpKernel->handleRaw(object(Request), '1') in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php line 73 at HttpKernel->handle(object(Request), '1', true) in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/silex/silex/src/Silex/Application.php line 509 at Application->handle(object(Request)) in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/silex/silex/src/Silex/Application.php line 484 at Application->run() in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/web/index.php line 49 ``` And: ``` ResourceNotFoundException: in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/routing/Symfony/Component/Routing/Matcher/UrlMatcher.php line 81 at UrlMatcher->match('/prevendita/hello/sadfasdf') in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/routing/Symfony/Component/Routing/Matcher/RedirectableUrlMatcher.php line 30 at RedirectableUrlMatcher->match('/prevendita/hello/sadfasdf') in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/silex/silex/src/Silex/LazyUrlMatcher.php line 51 at LazyUrlMatcher->match('/prevendita/hello/sadfasdf') in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/EventListener/RouterListener.php line 78 at RouterListener->onKernelRequest(object(GetResponseEvent)) at call_user_func(array(object(RouterListener), 'onKernelRequest'), object(GetResponseEvent)) in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php line 164 at EventDispatcher->doDispatch(array(array(object(Application), 'onEarlyKernelRequest'), array(object(SessionServiceProvider), 'onEarlyKernelRequest'), array(object(RouterListener), 'onKernelRequest'), array(object(LocaleListener), 'onKernelRequest'), array(object(Application), 'onKernelRequest')), 'kernel.request', object(GetResponseEvent)) in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/EventDispatcher.php line 53 at EventDispatcher->dispatch('kernel.request', object(GetResponseEvent)) in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php line 110 at HttpKernel->handleRaw(object(Request), '1') in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpKernel.php line 73 at HttpKernel->handle(object(Request), '1', true) in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/silex/silex/src/Silex/Application.php line 509 at Application->handle(object(Request)) in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/vendor/silex/silex/src/Silex/Application.php line 484 at Application->run() in /var/www/vhosts/teatrodellamemoria.it/httpdocs/assets/modules/prevendita/web/index.php line 49 ``` This is the code: ``` <?php require_once __DIR__.'/../vendor/autoload.php'; use Teatro\Models\Reservation; use Teatro\Models\ReservationsSeat; use Symfony\Component\Validator\Constraints; use Symfony\Component\Form\FormError; $app = new Silex\Application(); $app['debug'] = true; $app->register(new Silex\Provider\TwigServiceProvider(), array( 'twig.path' => __DIR__.'/../views', )); $app->register( new Silex\Provider\UrlGeneratorServiceProvider() ); $app->register( new Silex\Provider\SessionServiceProvider(), array( // 'session.storage.options' => array('name' => 'test') ) ); $app->register( new Silex\Provider\FormServiceProvider() ); $app->register( new Silex\Provider\ValidatorServiceProvider() ); $app->register(new Silex\Provider\TranslationServiceProvider(), array( 'translator.messages' => array(), )); $app->register( new Silex\Provider\SwiftmailerServiceProvider() ); $app->get('/prevendita/hello/{name}/', function ($name) use ($app) { return "Hello $name!"; })->bind('hello_name'); $app->get('/prevendita/hello', function () use ($app) { return "Hello!"; })->bind('hello'); $app->run(); ``` Development server is PHP 5.4 builtin webserver Production server is PHP 5.3 CentOS .htaccess files are basically the same. In the production env, the silex app is into a subfolder of document root let's say /prevendita so I added ``` RewriteRule ^prevendita /prevendita/web/index.php [L] ``` to redirect any request starting with /prevendita to my silex app