Remove .php from urls with htaccess

27,389

Try this code for hiding .php (will work both ways):

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## don't touch /forum URIs
RewriteRule ^forums/ - [L,NC]

## hide .php extension snippet

# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L]

# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [L]
Share:
27,389
Cbas
Author by

Cbas

Updated on May 26, 2020

Comments

  • Cbas
    Cbas almost 4 years

    EDIT: current .htaccess file:

    Options +FollowSymLinks -MultiViews
    # Turn mod_rewrite on
    RewriteEngine On
    RewriteBase /
    
    ## hide .php extension snippet
    
    # To externally redirect /dir/foo.php to /dir/foo
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
    RewriteRule ^ %1 [R,L]
    
    # To internally forward /dir/foo to /dir/foo.php
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/$1.php -f
    RewriteRule ^(.*?)/?$ $1.php [L]
    

    My site is hosted in a subfolder of a domain connected to a large hosting account.

    basesite
      /iioengine
        /forums
          /.htaccess //file works
          /.... //other MyBB content
        /demos.php
        /index.php //iioengine.com (homepage)
        /.htaccess //file doesn't work
        /... //other iioengine php pages
    

    Is the issue that I'm using two different htaccess files?

    Here is a link that needs to work: http://iioengine.com/demos

    I noticed that this current htaccess file disrupts all of the forums URL's as well

    This no longer works: http://iioengine.com/forums/Forum-Box2D

    EDIT: Thanks for reopening, I have made some progress. Here is my current htaccess file:

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

    I still get 404 pages, but if I put this line in:

    RewriteRule . /index.php [L]

    all non-'.php' requests get forwarded to the homepage... So mod_rewrite is definitely enabled, it's just not working right. Anyone know what the issue could be?

    EDIT: This is not a duplicate - none of the other solutions work for me. My question is not do solutions exist, its why aren't they working for me. No one has been able to resolve this, I have been trying many solutions myself. Isn't the point of this forum to get solutions to specific issues?

    Allow me to clarify...

    I have MyBB running in a subfolder and its rewrites work fine. This link, for instance, works: http://iioengine.com/forums/Forum-Box2D

    All the php pages that are not part of MyBB still have the .php extension in their URLs - I am trying to remove these but nothing is working. Example: http://iioengine.com/demos

    ... [original post]

    There is obviously a lot of information out there about this, but I have tried almost a dozen different solutions and have not gotten past a 404 page.

    Here is my site: http://iioengine.com/, all pages are php, and everything other than the homepage and all of the forums pages have a '.php' at the end of their URL that I would like to remove.

    In addition to redirecting non-'.php' requests to the correct pages, I would also like to remove the '.php' part even when it is part of the request (because all of my content already specifies '.php' in its hyperlinks).

    This is what I have so far, mostly taken from this post, but it doesn't work, I get a 404 page.

    RewriteEngine on
    RewriteBase /
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteRule ^(.*)$ $1.php [L,QSA]
    RewriteCond %{REQUEST_URI} ^/(.*).php$
    RewriteRule ^(.*)$ %1 [L,QSA]
    

    what do I need in my htaccess file to remove the file extension from the URL in all cases? Thanks

  • Cbas
    Cbas about 11 years
    I think there is an issue with how my htaccess file is being read or interpreted. This gives me a 404 page on each request
  • anubhava
    anubhava about 11 years
    Pls post your latest .htaccess in your question. Also provide more details like what URI did you try and little bit info about your directory structure.
  • anubhava
    anubhava about 11 years
    I think I know what's the problem and it can be fixed. Just need 1 more answer from you. What is DOCUMENT_ROOT for http://iioengine.com/ and where in DOCUMENT_ROOT you've placed above .htaccess file?
  • Cbas
    Cbas about 11 years
    index.php and .htaccess are both in the iioengine folder, which is a direct subfolder of my hosting account's root
  • anubhava
    anubhava about 11 years
    But I guess DOCUMENT_ROOT for http://iioengine.com/ is iioengine folder isn't it? You can put phpinfo(); in a php file to get that information.
  • Cbas
    Cbas about 11 years
    yes it is. here's an info page if it helps iioengine.com/phpinfo.php - I need to remove the htaccess file for you to view it though
  • anubhava
    anubhava about 11 years
    Ok got it, I edited my answer based on that phpinfo(). Put this edited code in the same .htacess and try it again.
  • Cbas
    Cbas about 11 years
    It's definitely removing the extensions, but I'm still getting 404 pages everywhere - including the forums
  • anubhava
    anubhava about 11 years
    Made another edit, pls try now. Also it would be better if we move this discussion to chat to sort this out.
  • Cbas
    Cbas about 11 years
  • Sergio
    Sergio over 10 years
    The previous example works very well when the url ends in a single .php file eg. mywebsite/file.php But, it removes everything else when I have additional parameters in the url e.g. mywebsite/file.php/param1. Does anyone know how to remove the .php extension, but keep or attach the other parameters? I would like something like mywebsite/file.php/param1 to become mywebsite/file/param1
  • anubhava
    anubhava over 10 years
    @Sergio: That will require little different approach. Feel free to open a new question and post a link here. Its better not to edit this 2+ yrs old answer.