How to remove index.php from URLs?
Asked Answered
H

9

30

All of my URLs on my Magento installation require index.php in them, like:

http://example.com/index.php/admin/
http://example.com/index.php/customer/account/login/

The problem is that the system by default links to URLs like

http://example.com/admin/
http://example.com/customer/account/login/

Which look prettier anyway. I assume this is a rewrite issue in .htaccess, but as tinkering with that in the past has given me 500s, I'd like to ask you guys first.

Changing the SEO settings, flushing the configuration cache, and reindexing URLs did not work as suggested here.

Hygiene answered 6/5, 2012 at 22:14 Comment(0)
C
86

Before you start, make sure the Apache rewrites module is enabled and then follow the steps below.

  1. Log-in to your Magento administration area then go to System > Configuration > Web.

  2. Navigate to the Unsecure and Secure tabs. Make sure the Unsecured and Secure - Base Url options have your domain name within it, and do not leave the forward slash off at the end of the URL. Example: http://www.yourdomain.co.uk/

  3. While still on the Web page, navigate to Search Engine Optimisation tab and select YES underneath the Use Web Server Rewrites option.

  4. Navigate to the Secure tab again (if not already on it) and select Yes on the Use Secure URLs in Front-End option.

  5. Now go to the root of your Magento website folder and use this code for your .htaccess:

    RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]

Save the .htaccess and replace the original file. (PLEASE MAKE SURE TO BACKUP YOUR ORIGINAL .htaccess FILE BEFORE MESSING WITH IT!!!)

  1. Now go to System > Cache Management and select all fields and make sure the Actions dropdown is set on Refresh, then submit. (This will of-course refresh the Cache.)

---------->

If this did not work please follow these extra steps.

  1. Go to System > Configuration > web again. This time look for the Current Configuration Scope and select your website from the dropdown menu. (This is of course, it is set to Default Config)

  2. Make sure the Unsecure and Secure fields contain the same domain as the previous Default Config file.

  3. Navigate to the Search Engines Optimisation tab and select Yes underneath the Use Web Server Rewrites section.

  4. Once the URLs are the same, and the rewrite is enabled save that page, then go back and make sure they are all checked as default, then save again if needed.

  5. Repeat step 6.

Now your index.php problem should be fixed and all should be well!!!

Comeau answered 19/3, 2013 at 16:23 Comment(7)
Does the order of lines matter?Gast
I'm not sure if the order of lines matter, I wouldn't imagine it does in this scenario. To be safe I would keep the format as presented above as this seems to work for a fair amount of people.Comeau
Make sure AllowOverride All is on for your configuration otherwise your .htaccess file will get ignored.Chesson
Re AllowOverride All in recent Ubuntu versions at least, that is added to /etc/apache2/apache2.conf <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> Than restart Apache: /etc/init.d/apache2 restartPacification
Sure, at least on Ubuntu 14.04, as default AllowOverride is none, so we need to change "<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>" to "<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>", so as rewrite start to workGolgi
I would upvote this answer 10x if I could :D Thanks @Blowtar!Harriman
OMG !!! Thanks John .... I was struggling to find it since 4 hrs. I am adding some more detail as answer below. you deserve upvote for it.Hedden
D
23

Follow the below steps it will helps you.

step 1: Go to to your site root folder and you can find the .htaccess file there. Open it with a text editor and find the line #RewriteBase /magento/. Just replace it with #RewriteBase / take out just the 'magento/'

step 2: Then go to your admin panel and enable the Rewrites(set yes for Use Web Server Rewrites). You can find it at System->Configuration->Web->Search Engine Optimization.

step 3: Then go to Cache management page (system cache management ) and refresh your cache and refresh to check the site.

Dirigible answered 9/5, 2012 at 7:21 Comment(2)
You change a comment in step 1 - doesn't make sense at allBellman
@MaherAbuthraa I think just a slash (/) is the default behavior of apache. So there is no need to add this line, if you are not using a subdirectory for your magento installation.Bellman
C
9

You have to enable mod_rewrite in apache to make clean urls to work

if mod_rewrite is not in phpinfo you have to install it by

sudo a2enmod rewrite
sudo apache2ctl -l

You need to replace the occurrence of AllowOverride none to AllowOverride all ( in /etc/apache2/sites-enabled/000-default)

Restart Apache

sudo service apache2 restart

In Magento’s admin go to System > Configuration > Web > search engine Optimization and change “Use Web Server Rewrites” to Yes

Canikin answered 12/11, 2012 at 7:21 Comment(2)
For future readers: my issue stemmed from the default "AllowOverride" being set to None - it should be set to All (for least troublesome experience).Sandarac
This solved my problem, with the default .htaccess configUneven
C
7

How about this in your .htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
Chandos answered 6/5, 2012 at 22:26 Comment(2)
No change at all. Magento stores its access at var/.htaccess though — would this be a problem?Hygiene
Magento stores one of its htaccess files in var/.htaccess, there are several in its directory trees to prevent remote compromise or reading privileged locations. You should have one in your server root directory.Prevention
B
2

Hi I'm late to the party.. just wanted to point out that the instructions from http://davidtsadler.com/archives/2012/06/03/how-to-install-magento-on-ubuntu/ were really useful.

I had Ubuntu server installed with Apache, MySql and Php so I thought I could jump to the heading Creating the directory from which Magento will be served from and I reached the same problem as the OP, i.e. I had 'index.php' needed in all the URLs (or I would get 404 not found). I then went back to Installing and configuring the Apache HTTP server and after restarting apache it works perfectly.

For reference, I was missing:

sudo bash -c "cat >> /etc/apache2/conf.d/servername.conf <<EOF
ServerName localhost
EOF"

... and

sudo a2enmod rewrite
sudo service apache2 restart

Hope this helps

Bina answered 28/2, 2013 at 12:34 Comment(0)
E
2

If the other solutions don't work for you, try this:

Step 1: (if your installation is in webroot)

Replace

    #RewriteBase /magento/

with

    RewriteBase /

Step 2:

Add following lines (inclusive exclude admin because backend needs index.php internally)

RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ http://www.yourdomain.com/$1 [R=301,L]
RewriteRule ^index.php/(admin|user)($|/) - [L]
RewriteRule ^index.php/(.*) $1 [R=301,QSA,L]

right after

RewriteRule .* index.php [L] 

This works for me

In case it is still not working, double check Magento configuration: System->Configuration->Web->Search Engine Optimization. Rewrites must be enabled.

Epiphany answered 2/12, 2015 at 14:59 Comment(0)
C
1

I tried everything on the post but nothing had worked. I then changed the .htaccess snippet that ErJab put up to read:

RewriteRule ^(.*)$ 'folder_name'/index.php/$1 [L]

The above line fixed it for me. where *folder_name* is the magento root folder.

Hope this helps!

Cassidycassie answered 14/11, 2012 at 14:2 Comment(0)
H
1

Mainly If you are using Linux Based system Like 'Ubuntu' and this is only suggested for localhost user not for the server.

Follow all the steps mentioned in the previous answers. +

Check in Apache configuration for it. (AllowOverride All) If AllowOverride value is none then change it to All and restart apache again.

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

Let me know if this step help anyone. As it can save you time if you find it earlier.

enter image description here

I am adding the exact lines from my htaccess file in localhost. for your reference

Around line number 110

<IfModule mod_rewrite.c>

############################################
## enable rewrites

Options +FollowSymLinks
RewriteEngine on

############################################
## you can put here your magento root folder
## path relative to web root

#RewriteBase /

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Images are for some user who understand easily from image the from the text:

enter image description here

Hedden answered 11/5, 2016 at 7:38 Comment(1)
Added image for better understanding for beginnersHedden
M
0

I'm using a php-laravel application on a ec2-apache server. This one was the only solution that worked for me. On apache2.conf change:

<Directory "/var/www/<your-app>"> 
 AllowOverride All
</Directory>

No .htaccess required.

Molnar answered 24/11, 2023 at 3:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.