How to remove index.php from Symfony4 router?
Solution 1
I do not know about Symfony. But it should work with all apache2 and php project.
First you need to do two things:
-
You need to check if php rewrite module is enabled. you can do it with
phpinfo()
. Write this in a fileinfo.php
and open in browser: http://localhost/info.phpNow search for
mod_rewrite
. If you seemod_rewrite
in this page that means,mod_rewrite
is enabled. - If
mod_rewrite
is not enabled, enable it. I enabled in in ubuntu 18.04 for apache with this command:$ sudo a2enmod rewrite
. Then restart apache2$ systemctl restart apache2
if mod_rewrite
is enabled, then other configuration will work.
-
Then add
AllowOverride All
in.conf
file:<Directory /var/www/project/public> AllowOverride All </Directory>
-
Then add
.htaccess
file in you project root directory.<IfModule mod_rewrite.c> RewriteEngine On # Send would-be 404 requests to Craft RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.+) index.php?p=$1 [QSA,L] </IfModule>
Note: Try adding .htaccess
file in /var/www/project/.htaccess
or in /var/www/project/public/.htaccess
. Not sure what will work.
Solution 2
This apache configuration doesn't include the redirection to index.php for every request. You have 2 choices:
• On the same page, there is a configuration which include this redirection after this sentence : "Use the following optimized configuration to disable .htaccess support and increase web server performance:"
• If you want to use .htaccess to proccess this redirection, then you could simply execute composer require apache-pack
. This command will install a .htaccess in your public directory.
Miles M.
Student in Internet Technology, studying in Paris, working In N.Y.C. for a web development internship. Working on my own project in parallel.
Updated on June 04, 2022Comments
-
Miles M. almost 2 years
I have been following Symfony 4 documentation as to how to configure a web server.
https://symfony.com/doc/current/setup/web_server_configuration.html
My .conf file in my apache 2.4 configuration is exactly as described in their documentation. I’m copying part of it here :
<Directory /var/www/project/public> AllowOverride None Require all granted Allow from All <IfModule mod_rewrite.c> Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L] </IfModule> </Directory>
Going to my platform, everything works fine but as soon as I’m going to any page, it shows a 404 error. If I add index.php in the url it works fine. Could you help me figure out what is going on?
For example: When I’m on http://myplatform.com/
I can save an email address on this page. If I go to http://myplatform.com/index.php/saveEmail it works, but from my page, my links redirects me to http://myplatform.com/saveEmail and it doesn’t work.
If i go to http://myplatform.com/index.php then everything works fine.
How to I remove index.php from the url ?
Thanks!
-
Miles M. almost 6 yearsThanks. I’ve been using the optimized version you mentioned. The code I pasted above was actually the one from this section. I’ve also installed apache-pack. I’m a bit stuck here.
-
Miles M. almost 6 yearsShould I copy and paste all of the .htaccess in my public directory inside of the .conf file in site-enabled?
-
Miles M. almost 6 yearsOrder Allow,Deny isn’t supported by Apache 2.4. I’m not using .htaccess so I don’t need to do AllowOverride All. I’ve tried but no luck.
-
Halfstop over 5 yearsIn my opinion there is but one correct way to do it. That's with composer require apache-pack. Why work hard when the problem has already been solved?
-
Florian Hermann over 5 yearsPersonally, I use the apache-pack only for the development and in production, I use as recommended the configuration without the .htaccess for optimizations of performances
-
juanitourquiza about 5 yearsenable mod_rewrite is perfect for me. thans