Removing .php file extension with .htaccess file

15,970

Solution 1

Use this code for hiding/removing .php extension:

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

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

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]

Solution 2

So after a long bout with google I finally figured this one out. This works with Godaddy shared hosting. It removes php file extensions so http://yoursite.com/about.php becomes http://yoursite.com/about

Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f    #If requested is not a filename...
RewriteCond %{REQUEST_FILENAME} !-d    #And not a directory
RewriteRule ^(.*)$ $1.php [L]          # perform this redirect

(remove comments before uploading to server)

Solution 3

I had this problem also, but I found that this seemed to fix the GoDaddy .htaccess problem.

# Fix Rewrite
Options -Multiviews

# Mod Rewrite
Options +FollowSymLinks
RewriteEngine On
RewriteBase / 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}\.php -f 
RewriteRule ^(.*)$ $1.php 

Solution 4

Pasted above everything in my .htaccess file worked for me...

## 301 Redirects
RewriteCond %{QUERY_STRING}  ^$
RewriteRule ^(.*)\.asp$ $1? [R=301,NE,NC,L]
Share:
15,970
Adam Pflantzer
Author by

Adam Pflantzer

HTML and CSS guy trying to learn more about jquery, php and html5.

Updated on June 11, 2022

Comments

  • Adam Pflantzer
    Adam Pflantzer almost 2 years

    I want www.example.com/about.php to just be www.example.com/about

    I created an .htaccess file and placed it in the root of my server. I am using linux shared hosting. PHP version 5.2

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php
    

    It seems that this code should work properly, but for some reason it does not. I get a 404 error when I try to navigate to a page without the .php extension.

    Here's my markup too:

    <nav>
            <div class="container">
                <ul>
                    <li><a href="index.php" <?php if (strpos($_SERVER['PHP_SELF'], 'index.php')) echo 'class="current-nav"';?>>home</a></li>
                    <li><a href="about.php">about</a></li>
                    <li><a href="services">our services</a></li>
                    <li><a href="portfolio" <?php if (strpos($_SERVER['PHP_SELF'], 'portfolio.php')) echo 'class="current-nav"';?>>portfolio</a></li>
                    <li><a href="testimonials" <?php if (strpos($_SERVER['PHP_SELF'], 'testimonials.php')) echo 'class="current-nav"';?>>testimonials</a></li>
                    <!--<li><a href="#">client area</a></li>-->
                    <li><a href="contact" <?php if (strpos($_SERVER['PHP_SELF'], 'contact.php')) echo 'class="current-nav"';?>>Contact</a></li>
                    <li><a href="order" <?php if (strpos($_SERVER['PHP_SELF'], 'order.php')) echo 'class="current-nav"';?>><strong>Free Quote</strong></a></li>
                </ul>
            </div>
        </nav><!--/navigation--> 
    

    You can see I tried using the php extension in the link and also tried without. The links with the php extension go to the page, but don't remove the extension.

    I did a test to see if module_rewrite was enabled by putting in some garbage and returning a 500 error.