skip to Main Content
RewriteEngine On
RewriteRule ^$ /index.phtml [R,L]
RewriteRule ^index.phtml.+$ /index.php$1 [R,L]

I have 2 urls like https://www.example.com/index.phtml and https://www.example.com/index.php which both point to very different sites. I want to redirect to index.php in case there are any parameters found after index.phtml.

For example, https://www.example.com/index.phtml?a=b should go to https://www.example.com/index.php?a=b (second rule). I am trying the above rules but the second one isn’t matching (the first rule works fine). Thanks for any help/suggestions

Please ask if you need any more details.

2

Answers


  1. With your shown samples, please try following .htaccess rules file. Please make sure that your htaccess file and index.php are present in same folder.

    Also make sure to clear your browser cache before testing your URLs.

    RewriteEngine ON
    ##For without query string rules.
    RewriteCond %{QUERY_STRING} ^$
    RewriteRule ^index.phtml/?$ index.php [R=301,NC,L]
    
    ##For query string rules.
    RewriteCond %{THE_REQUEST} s.index.phtml?([^=]*=S+)s [NC]
    RewriteRule ^ index.php?%1 [R=301,L]
    
    Login or Signup to reply.
  2. You may use this code in site root .htaccess:

    RewriteEngine On
    
    # if there is a query string then redirect
    # /index.phtml to /index.php 
    RewriteCond %{QUERY_STRING} .
    RewriteRule ^(?:index.phtml)?$ /index.php [L,NC]
    
    # redirect landing page to /index.phtml
    RewriteRule ^$ /index.phtml [R=302,L]
    

    Note that QUERY_STRING get automatically appended to target URL so /index.phtml?a=b will be redirected to /index.php?a=b.

    Make sure to clear your browser cache before testing this change.

    Once you verify it is working fine, replace R=302 to R=301. Avoid using R=301 (Permanent Redirect) while testing your redirect rules.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search