1

I know this has been asked many times, but something strange is happening to me. Apache DocumentRoot is pointing to symfony/web/ and this is my .htaccess inside web/ dir:

DirectoryIndex app_dev.php
#DirectoryIndex app.php

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^app\.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]


    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^(.*)$ app_dev.php [QSA,L]
    #RewriteRule ^(.*)$ app.php [QSA,L]

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    RewriteRule .? %{ENV:BASE}app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        RedirectMatch 302 ^/$ /app.php/
    </IfModule>
</IfModule>

Well, the thing is www.example.com/route1/ is working and www.example.com/route2/ is throwing an error:

Oops! An Error Occurred The server returned a "404 Not Found". Something is broken. Please e-mail us at [email] and let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.

While www.example.com/app_dev.php/route2/ is working ok (also www.example.com/app_dev.php/route1/)

Help?

Update. Cache clear in prod throws this error (I never tried before, I'm working on dev):

[Doctrine\Common\Proxy\Exception\UnexpectedValueException] The type hint of parameter "userRoles" in method "addRole" in class "MyProject\PanelBundle\Entity\User" is invalid.

[ReflectionException] Class Maycol\BlogBundle\Entity\Role does not exist

K. Weber
  • 2,643
  • 5
  • 45
  • 77

2 Answers2

6

This is the .htaccess that worked for me:

DirectoryIndex app.php
#DirectoryIndex app_dev.php

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Redirect to URI without front controller to prevent duplicate content
    # (with and without `/app.php`). Only do this redirect on the initial
    # rewrite by Apache and not on subsequent cycles. Otherwise we would get an
    # endless redirect loop (request -> rewrite to front controller ->
    # redirect -> request -> ...).
    # So in case you get a "too many redirects" error or you always get redirected
    # to the startpage because your Apache does not expose the REDIRECT_STATUS
    # environment variable, you have 2 choices:
    # - disable this feature by commenting the following 2 lines or
    # - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
    #   following RewriteCond (best solution)
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    #RewriteRule ^app_dev\.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L]
    RewriteRule ^app\.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L]

    # If the requested filename exists, simply serve it.
    # We only want to let Apache serve files and not directories.
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]


    RewriteCond %{REQUEST_FILENAME} -f
    #RewriteRule ^(.*)$ app_dev.php [QSA,L]
    RewriteRule ^(.*)$ app.php [QSA,L]

    # The following rewrites all other queries to the front controller. The
    # condition ensures that if you are using Apache aliases to do mass virtual
    # hosting, the base path will be prepended to allow proper resolution of the
    # app.php file; it will work in non-aliased environments as well, providing
    # a safe, one-size fits all solution.
    RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]
    #RewriteRule .? %{ENV:BASE}app_dev.php [L]
    RewriteRule .? %{ENV:BASE}app.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
    <IfModule mod_alias.c>
        # When mod_rewrite is not available, we instruct a temporary redirect of
        # the startpage to the front controller explicitly so that the website
        # and the generated links can still be used.
        #RedirectMatch 302 ^/$ /app_dev.php/
        RedirectMatch 302 ^/$ /app.php/
        # RedirectTemp cannot be used instead
    </IfModule>
</IfModule>
K. Weber
  • 2,643
  • 5
  • 45
  • 77
  • For some reason `RewriteRule ^app\.php(/(.*)|$) %{CONTEXT_PREFIX}/$2 [R=301,L]` only worked for `/app.php/` cases for me, not `app.php` as well. I had to duplicate these lines and add a `RewriteRule ^app\.php$ %{CONTEXT_PREFIX}/ [R=301,L]` entry instead. Not sure why as the regex works! – PeterB Oct 07 '13 at 10:10
  • could you show your final file? I can not get it work on production server (app.php) – InsaurraldeAP Jan 27 '16 at 15:40
0

This error is NOT Apache/htaccess related. This 404 error page is the default one of symfony itself!

Something is broken. Please e-mail us at [email] and let us know what you were doing when this error occurred. We will fix it as soon as possible. Sorry for any inconvenience caused.

There is no route matching /route2. Check your routing like this:

php app/console router:debug 

To inspect it quicker use grep or findstr ( Windows )

php app/console router:debug | grep route2

Please also check that your route is not only configured in the dev environment ( i.e. only in routing_dev.yml )!

php app/console router:debug --env=prod

please clear your prodution cache with ...

php app/console cache:clear --env=prod

... and check your log files if there is an uncaught Exception leading to the 404 page displayed when accessing the page. You can for example use this command to view the live changes in the production logfile.

tail -f app/logs/prod.log
Nicolai Fröhlich
  • 51,330
  • 11
  • 126
  • 130
  • I can see route2 with router:debug (/route2/) and appears to be exactly the same as /route1/ (except for the name), besides, /app_dev.php/route2/ works. – K. Weber May 22 '13 at 11:07
  • Please check router:debug with --env=prod ... app.php uses only routing.yml and app_dev.php also loads routing_dev.yml. If the route is only in routing_dev.yml it wont be available in the production enviroment. – Nicolai Fröhlich May 22 '13 at 12:18
  • They are the same in both environments, dev and prod, I can't see any differences between route1 and route2 – K. Weber May 22 '13 at 13:02
  • updated my answer ... please clear cache and check the logfiles after you have made a request. – Nicolai Fröhlich May 22 '13 at 13:26
  • Cache clear throws error (will update orig. post), prod.log has this: [2013-05-22 13:05:17] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET /route2/"" at C:\wwwroot2\myproject\app\cache\prod\classes.php line 3609 [] []. BTW, I'm under Windows – K. Weber May 22 '13 at 13:30
  • please manually remove your app/cache/prod folder completely ... then execute app/console cache:clear again. The Exception is clear ... there is NO /route2/ in your routing ! did you maybe register the route /route2 and NOT /route2**/** ? please dump the output of the command "php app/console --env=prod router:debug | findstr route2" – Nicolai Fröhlich May 22 '13 at 13:34
  • front_route2 GET ANY ANY /route2/{code}/ (code has a default value in routing.yml). I keep getting random errors in console, this is hell! Tha same errors shown in OP (entity user, maycol), and sometimes cache:clear is unable to delete all folders or rename them – K. Weber May 22 '13 at 13:54