How to redirect any page to index.php with .htaccess?

To redirect any page to index.php using an .htaccess file, you would typically use mod_rewrite, which is a module available in Apache HTTP Server. Add the following lines to the .htaccess file:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]

mod_rewrite must be enabled. Here’s a step-by-step guide on how to set up such a redirection:

  1. Ensure mod_rewrite is enabled:
    Before you start, make sure that mod_rewrite is enabled in your Apache configuration. You can check this with your hosting provider or by accessing your server's configuration files.

  2. Create or Edit .htaccess File:
    You’ll need to either create a new .htaccess file in the root directory of your website or edit an existing one.

  3. Set up the Rewrite Rules:
    Add the following code to your .htaccess file. This code will redirect all requests to your index.php file except for requests directly to files that exist (like images, stylesheets, etc.) or directories that exist.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /index.php [L,QSA]

Explanation of the code:

  • RewriteEngine On enables the use of the URL rewriting engine.
  • The first condition RewriteCond %{REQUEST_FILENAME} !-f checks if the requested filename is not a file.
  • The second condition RewriteCond %{REQUEST_FILENAME} !-d checks if the requested filename is not a directory.
  • RewriteRule ^(.*)$ /index.php?path=$1 [NC,L,QSA] redirects all requests.
  • The ^ symbol is a regex that matches the beginning of a URL,
  • .. is one instance of any character
  • .* match any number of instances of any character.
  • [L] specifies that this should be the last rule applied if this rule is matched.
  • [QSA] specifies Query String Append. It preserves query strings (e.g., should redirect to
  1. Test the Redirection:
    After saving your .htaccess file, try accessing different URLs of your site. Everything except direct links to actual files or directories should now redirect to index.php.

This setup should effectively redirect all non-file, non-directory requests to index.php, while preserving the functionality of direct file or directory access. Modify this setup as necessary depending on specific requirements or server configuration. Ensure to back up your original .htaccess file before making significant changes to quickly revert if something goes wrong.