user1236523
user1236523

Reputation:

How do I get rid of the need for the "/app.php/" in a new Symfony2 app's production URL?

I've done a 1st install of Symfony2,

    php app/console --version
        Symfony version 2.0.11 - app/dev/debug

I installed it under an existing DocumentRoot by configuring my apache2 server vhost

    <VirtualHost 127.0.0.1:80>
        ...
        DocumentRoot /srv/www/localhost_www
        ...
        <Directory "/srv/www/localhost_www" >
            AllowOverride none
            Options -ExecCGI +FollowSymLinks +Includes +Indexes +MultiViews
            Order Allow,Deny
            Allow from All
        </Directory>
        ...
        Alias /TESTAPP  "/srv/www/TESTAPP/web/"
        <Directory "/srv/www/TESTAPP/web/">
            Options All
            AllowOverride All
            Allow from All
        </Directory>

        Alias /TESTAPP.symfony  "/srv/www/TESTAPP/"
        <Directory "/srv/www/TESTAPP/">
            Options All
            AllowOverride All
            Allow from All
        </Directory>
        ...

After an OK install, and successfully following "The Book" to build the demo "Hello" app, if I nav in a browser to any/all of,

  dev:
        http://localhost/TESTAPP.symfony/web/app_dev.php/hello/ME
        http://localhost/TESTAPP/app_dev.php/hello/ME
  prod:
        http://localhost/TESTAPP.symfony/web/app.php/hello/ME
        http://localhost/TESTAPP/app.php/hello/ME

I see the expected,

"Hello ME!"

I want to rewrite only the production URLs, hiding "app.php" so that the following set of URLs work in the nav bar of a browser for my Symfony2 app:

  dev:
        http://localhost/TESTAPP.symfony/web/app_dev.php/hello/ME
        http://localhost/TESTAPP/app_dev.php/hello/ME
  prod:
     !! http://localhost/TESTAPP.symfony/web/hello/ME
     !! http://localhost/TESTAPP/hello/ME

Iiuc, the default web/.htaccess

        cat web/.htaccess
                <IfModule mod_rewrite.c>
                    RewriteEngine On
                    RewriteCond %{REQUEST_FILENAME} !-f
                    RewriteRule ^(.*)$ app.php [QSA,L]
                </IfModule>

needs to change.

I've dug around in the docs and on the web, tried vdiffferent recommendations for modding the RewriteRule, adding 'RedirectMatch permanent', etc., and I'm not managing to get a simple

http://localhost/TESTAPP/hello/ME

to ever work. I always seem to need to add the "/app.php/".

What are the specific changes I'd need to make in order to get this to work?

Thanks.


@chasen

is mod_rewrite enabled for apache?

yes

if you have your .htaccess file in your web directory

i do

and you host file pointing to the web folder the

it is, as above,

    Alias /TESTAPP  "/srv/www/TESTAPP/web/"  
        <Directory "/srv/www/TESTAPP/web/">  

app.php should not be needed.

that's my problem. without it, it's not working for me.

Specifically,

    https://localhost/TESTAPP/app.php/hello/ME

returns:

"Hello Me!"

but

    https://localhost/TESTAPP/hello/ME

returns

Object not found!

The requested URL was not found on this server.
If you entered the URL manually please check your
spelling and try again.

If you think this is a server error, please contact
the webmaster.
Error 404

Upvotes: 5

Views: 13978

Answers (3)

Dung
Dung

Reputation: 20565

In my case I need to modify the line containing AllowOverride None to read AllowOverride All. This tells Apache that it's okay to allow .htaccess files to over-ride previous directives. You must reload Apache before this change will have an effect (https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles):

Do this: - go to "/etc/apache2" modify file "apache2.conf" section:

<Directory /var/www/>
    Options FollowSymLinks
    AllowOverride All
    Require all granted

  • restart server: /etc/apache2# service apache2 restart

it should work. If it does not work, still you have done 1 step right to insure .htaccess is allowed to override. There are many other reasons can be fixed with the above instruction.

Upvotes: 3

thorinkor
thorinkor

Reputation: 966

Adding the RewriteBase rule with the name of the folder in which the project is held to the .htaccess file does it's job! Thanks!

RewriteBase /project_name

Upvotes: 0

chasen
chasen

Reputation: 456

i know that its a silly question but is mod_rewrite enabled for apache?

if you have your .htaccess file in your web directory and you host file pointing to the web folder the app.php should not be needed.

if you are running ubuntu or a similar distro you can do:

sudo a2enmod rewrite
sudo service apache2 reload
sudo service apache2 restart

That should enable the mod, and reload apache.

EDIT:

That response you are getting back is it in a symfony page? if it is its likely that your prod cache needs to be cleared, from the root directory for the application use the symfony console to clear the cache:

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

EDIT:

If neither of those have worked you may try adding a RewriteBase to the htaccess file:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /TESTAPP
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

Upvotes: 14

Related Questions