2022-09-04 | 1091 Print PDF
I found myself in the need to remove the URL extensions from my webpage URLs due to SEO friendly URL I was trying to optimize for, apart from replacing the underscores in my page URL with hyphens, I also needed to remove the URL extensions of PHP to become hidden. From a security perspective, I publish a post on HTTP Security Response Headers For web Security, it is much better to hide your URL extensions as it makes it raises the interest of hackers to assume your file is located in a separate folder on the server.
I will not be stalling so let's go right into it.
Like the title says I need to remove the .php from a URL with a .htaccess RewriteRule
.
https://example.com/about.php
should be
https://example.com/about
And to do this we will be utilizing the .htaccess file located in your server public_html, if yours is hidden then try to unhide it.
Open the .htaccess file via an editor then apply the code below to get the parsing to work effectively
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(([A-Za-z0-9-]+/)*[A-Za-z0-9-]+)?$ $1.php
For HTML or other URL extensions, you simply replace the PHP with the page extension eg HTML
There are other codes that function as described above, you can also do a rewrite with files that are not located in the directory path, if you have a file in PHP you can make it call up as HTML
RewriteEngine ON RewriteBase / RewriteCond %{ENV:REDIRECT_STATUS} ^$ ##using THE_REQUEST variable for condition check. RewriteCond %{THE_REQUEST} s/([^.]*).php/?s [NC] ##Performing external redirect here. RewriteRule ^ %1? [R=301,L] ##Performing rewrite for non-existing pages. RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{DOCUMENT_ROOT}/$1.php -f RewriteRule ^(.*)/?$ /$1.php [QSA,L]
Then we have another that allows you to actually set the rewrite to affect even the directory path of the url, eg domain/demo/webpage.php will become domain/demo/webpage
RewriteEngine on
RewriteRule ^([^/.]+)$ $1.php [L]
you can also set expose_php
to “Off” in php.ini.
Using WHM, you can edit httpd.conf to set .PHP as the default file type, but you can’t do this in cPanel because any update will reset your configuration.
The downside to this is that PHP errors are usually dumped into an error log that isn’t displayed to the client and can only be accessed server-side. If PHP attempts to “display an error page” as it would locally, the browser would only output a blank page. To resolve that issue you might need to have your custom 404 error page as well and have it redirect to handle the custom error page handler your server will normally display.
# Return server 404 page 404.php to your custom 404
RewriteRule ^ /404 [L,R=301]
# Return 404 if original request is .php RewriteCond %{THE_REQUEST} "^[^ ]* .*?.php[? ].*$" RewriteRule .* - [L,R=404]
We finally have the masking technique to parse your desired page extension
###php masking rule for individual files# ####
RewriteCond %{THE_REQUEST} seo-packages.php
RewriteRule ^ /seo-packages.html [L,R=301]
#Rewrite html to php
RewriteRule ^(.*).html$ $1.php
#####ENDOFRULE###
I received many requests asking how to add a trailing slash at the end, for example: yoursite.com/page/
Ignore the first snippet and insert the code below. The first four lines deal with the removal of the extension and the following, with the addition of the trailing slash and redirecting.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/$ $1.php RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(.[a-zA-Z0-9]{1,5}|/)$ RewriteRule (.*)$ /$1/ [R=301,L]
Link to the HTML or PHP file the same way as shown above. Don’t forget to change the code if you want it applied to an HTML file instead of PHP.
How to Remove .php from URL in WordPress, you simply apply any of the suitable codes above and use.
There is also the option of allowing this rule to affect all your subdirectory pages, ie to have even domain/path/webpage.php become domain/path/webpage
you will have to use the following.htaccess code
RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+).php [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+).html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
Please Note: I have included that of HTML as well for this write-up purpose, if you have any other extension URLs simply replace them in the code above.
Google CEO Sundar Pichai: Search will profoundly change in 2025
3 Most Important Business Growth Strategies
Top 20 Work From Home Job Skills
SEO Tips and Strategies For Small Businesses
Google is making a major change to Local Service Ads
Why is Google Ads So Expensive a Case Study
Meta Careers Remote Work From Home Jobs Scam
Strategies For Integrating Organic and Paid Web Site Traffic
How to use Google Analytics GA4 Reporting
Digital Marketing Agency Red Flags List