When it comes to creating a website, one of the most important things to consider is the user experience. This includes not only the design and functionality of the website but also the structure of the URLs.
A clean and simple URL structure can make it easier for users to understand the organization of the website and improve the overall navigation. Additionally, it can also help with search engine optimization (SEO) by making it easier for search engines to crawl and index your pages.
The benefits of hiding file extensions:
- Back-end technology is hidden from end users. But it’s still not hard to identify the technology for experts.
- The best pros of this are that we can easily change backend technology without affecting the SEO of the pages.
- Read more about .htaccess here
One way to improve the structure of your URLs is by removing the file extensions, such as .php and .html. This can make your URLs appear cleaner and more professional, and can also help to hide the technology used to build the website.
The process of removing file extensions from URLs can be done using the .htaccess file. The .htaccess file is a configuration file used by the Apache web server and can be used to make changes to the server’s behavior, including URL rewriting.
Removing .php
Extension from URL
For example, You need to change the URL from http://example.com/about.php to http://example.com/about.
Create a new `.htaccess` file or edit an existing one. This file should be placed in the root directory of your website. Add the following code to the `.htaccess` file:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.php [NC,L]
Now, If the user accessed /about in the browser, it will show the content from /about.php. But still, if any user typed the completed URL as http://example.com/about.php, this will not redirect. Now you need to add some more rules to the `.htaccess` file.
RewriteCond %{THE_REQUEST} /([^.]+)\.php [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]
This code tells the server to turn on the rewrite engine and then checks if the requested URL is not a directory and if the file with a `.php` extension exists. If both conditions are met, it rewrites the URL by removing the .php extension.
Removing .html Extension from URL
For example, you need to convert your URL from http://example.com/about.html to http://example.com/about. Edit the `.htaccess` file and add the following configuration:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^.]+)$ $1.html [NC,L]
Now, If the user accessed /about in the browser, it will show the content from /about.html. Now, You may need to redirect users which typed the complete URL as “http://example.com/about.html” to the new URL “http://example.com/about”.
RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
It is important to note that removing file extensions from your URLs can have an impact on your website’s functionality. For example, if you have links or scripts on your website that are hardcoded with the file extensions, they will no longer work. Therefore, it’s a good idea to test your website thoroughly after making these changes to ensure that everything is working as expected.
Additionally, you should also keep a backup of your original `.htaccess` file, in case you need to revert the changes.
Conclusion
In conclusion, removing file extensions from your URLs can make them appear cleaner and more professional, and can also help to improve the user experience and SEO. By using the `.htaccess` file to remove `.php` and `.html` extensions, you can make this change easily and effectively. Remember to test your website thoroughly after making these changes to ensure that everything is working as expected.
36 Comments
First of all, thank you for this excellent and very simple explanation. It works prefectly. In Chrome.
Unfortunately my client uses Safari and the weirdest thing happens. When I type in the URL without the extension it works great. However when I click on a link on the website or when I add .php when typing the URL I get a 443 Bad Request error. Is there something I have to add to the .htaccess file? Or is this a server problem at the webhost’s side?
I hope you can help me out here. Thanks!
I removed the file for now by the way, since my client uses Safari.
Keep on writing, great job!
Amazaing artical share. I can remove .php my site
I AM JUST TESTING……………
I am working html website my file name index.html but only show index ? Please help me which place to write a rewrite queries
І am regilar reader, how aree you everybody? This post posted at this websute
is truly pleasant.
Thanks for the very simplified article.
Hi, Rahul.. thanks it works,
but, what if :
localhost/test/index.php
to
localhost/test/index.html or another ext.
automatic rewrite rules same as the your content.. please help ! thanks before
The code was provided in this blog only.
RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
What if i want to remove also query strings from url?
cool.. thanks man
Hi, In my .htaccess write below code for URL displaying purpose
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^request-quote?$ quote.php [NC,L]
my URL now like https://mywebsite,com/request-quote this one show quote.php when google indexed old URL’s are like https://mywebsite.com/quote.php in this case we need URL change to same like “https://mywebsite,com/request-quote”. Any possibility I am struct here 16 hours I researched but no use please help me.
I want to remove all extensions from URL.
worked, tnx man
It working but with ajax i facing some variable value passing issue , (undefined warning )
var dataString = ’email=’+ email + ‘&password=’+ password + ‘&jsremem=’+jsremem+ ‘&previousurl=’+previousurl;
$.ajax({
type: “POST”,
url: “ajaxlogin.php?type=abc”,
data: dataString,
cache: false,
success: function(result){ alert(result);
}
});
thank’s nice one its works 100%
Thank you
This really helps.
After searching for almost a couple of Hour. This setting worked well! Thank you
first ofall thanks to give this code
this is ver important and usefull code
thanks very mouch
Thanks Man…
You help me out…
I Pasted The Code But Other Website Pages Are Not Working
Ex-:when i open http://www.researchpanel.co.in/about-us it will open home page
Hi Rahul,
If we have subfolder having different site, then url is not working.
For example, http://test.com/ is my main site and I have other site on http://test.com/site2.
So If I open http://test.com/site2 this url it shows me an error:
The requested URL /site1/site2/.php was not found on this server.
Do you have any solution for this?
Hi Rahul,
Its working well with url but when I try to submit the form, I loose all the values. I cannot submit the form.
What is the reason?
Hi Rahul,
Very easy to read and understand, however, I am having trouble in that it doesnt work for me, and I dont know why?
Please help me if you can?
Below is the url for the same where I want to remove .php extension
http://localhost/mysite/api/users.php/users/abcdf/12345
can you let me know how to remove PHP extension from specific php pages eg http://www.abc.com/contact-us.php
How to redirect http://www.abc.com/contact-us.php to http://www.abc.com/contact-us
Hi Gili,
The updated tutorial will help you more to achieve your tasks. For the single file, I hope below .htaccess rules should work for you.
RewriteEngine on
RewriteCond %{THE_REQUEST} /contact-us.php [NC]
RewriteRule ^ /contact-us [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [NC,L]
thank you for this code
but what to do if i want to remove .html extensionform URL like this “/WordPress/oepl/projecttask?p=project_detail.html&p_id=94836894-0813-xxxx-xxxx-xxxxxxxxxxxx”
Hi Krishna,
What URL do you need after rewrite it?
I write this code but I still have a problem. When I manually type websitename/pagename.php it will not remove the extension (.php) please help to resolve this.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/.]+)$ $1.php [L]
Hi Ali,
I hope updated tutorial will help you more.
Hi, Shall i know, its work on local host xampp server, i try it on local but not getting it, can you help to give the solution for it
Please check for below directive in httpd.conf and set it to all.
Allowoverride all
It worked very well for me. Thanks
Really good post i am going to use in my website url rewritting
thanks
how to remove both?
I also wrote the small tutorial how to remove .php extension from url, hope you guys like it.
https://htmlcssphptutorial.wordpress.com/2015/08/24/remove-php-extension-from-url-using-htaccess/