How To Remove index.php From Permalink In WordPress

remove index.php

After a successful migration of your WordPress site to another server, the first thing you would like to do is enter Permalinks settings and remove index.php from permalink in WordPress. Having index.php in permalink often can lead to 404 missing page error and it disrupts User-Friendly URLs. 

Since you probably imported the database, there’s a good chance that you are going to see ‘index.php’ already create itself into your URL structure. If you want to remove index.php from the permalink here’s what you can do:

Remove index.php From URL WordPress

Follow these 3 simple steps –

Step 1: Make Sure ‘mod_rewrite’ is enabled on your server

At first, you log in to your hosting site and make sure your ‘mod_rewrite’ is enabled. If this module is active on your server, you will be able to create an info file and check for yourself. 

In cPanel, Mod_Rewrite is compiled with Apache by default. E.g.

 root@server [~]# httpd -l|grep rewrite

If you want to check whether mod_rewrite is enabled on the server, open your website root directory. Now create a PHP file named mod_rewrite.php

Add the following code to this file.

<?php echo "Mod_rewrite is activated!"; ?>

Afterward, create a .htaccess file and rename the original .htaccess file to .htaccess_1 if you have it.

Now add the following code to the .htaccess file.

RewriteEngine On
RewriteRule ^.*$ mod_rewrite.php

Enter your website. If you see a message such as ‘Mod_rewrite is activated’, then it is enabled on your server. If you find anything else such as “mod_rewrite is disabled’, make sure to delete the .htaccess file that you created earlier and rename the original file to ‘.htaccess’.

Step 2: Set the Permalink Structure

Now navigate to Dashboard -> Settings -> Permalinks, then choose the ‘Custom Structure’ option and enter /%postname%. Then click on save changes. 

Step 3: Edit .htaccess file

Now open ‘File Manager’ from your hosting site and open the .htaccess file that is located at the root of your website folder(I am using cPanel). 

Now copy the following code and paste it on your .htaccess file. 

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

This will be enough to remove index.php from the permalink in the WordPress site. 

Additional Known Issues That Might Occur

Sometimes steps described above won’t give you any results. On some servers with high security, it may appear that ‘the mod_security is blocking your settings’ thus the index.php remains on your URL structure.

To solve this try adding the below piece of code in your .htaccess file. 

<IfModule mod_security.c>
SecFilterEngine Off

Last Words

One more thing, check for a config file for Apache which may also override your .htaccess directives. Look for Ubuntu default /etc/apache2/apache2.conf file and change the entry for / and /var/www from AllowOverride None to AllowOverride All. Afterward, restart the apache server and hopefully, it will solve this issue as well. 

You may also want to know How to edit and change post/page URL in WordPress. It’s a post that describes the ways to change or edit post/page URL easily.

Let me know after removing index.php from your permalink. If you face any other issues ask me I will be happy to help and don’t forget to share this post. 

2 thoughts on “How To Remove index.php From Permalink In WordPress”

Leave a Comment

Your email address will not be published.