What?
Hide the .php extension of your PHP files in the URL of your site address.
Instead of:
http://www.example.com/page.php
Visitors to your site will see:
http://www.example.com/page/
Why?
There are actually quite a few reasons to do this.
- Make your URLs cleaner and easier to remember for visitors
- Make dynamic pages appear static for SEO
- Security by obscurity (albeit very weakly so)—visitors cannot tell as easily that you are using PHP
- For fun (yay!)
How?
There a few ways you can do this.
Method 1: example.com/test => example.com/test.php
RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME}\.php -fRewriteRule ^(.*)$ $1.php
With this rewrite,
http://www.example.com/test.php
is the same as http://www.example.com/test
but NOT http://www.example.com/test/
GET variables can still be pushed through:
http://www.example.com/test.php?id=5
is the same as http://www.example.com/test?id=5
Method 2: example.com/test/ => example.com/test.php
RewriteEngine onRewriteRule ^(.*)/$ $1.php
This is a slight variation on the first method, except now the php file looks just like a directory. You can still access files within the directory. Parameters get passed correctly as well, though it looks a little goofy.
http://www.example.com/test/
=> http://www.example.com/test.php
http://www.example.com/test/?id=5&code=4
=> http://www.example.com/test.php?id=5&code=4
http://www.example.com/test/anotherfile.html
=> http://www.example.com/test/anotherfile.html
(only directs paramters if it starts with ?).Method 3: example.com/test/id/5/ => example.com/test.php?id=5
This method allows the user to pass on one parameter hidden as directory folders.
RewriteEngine onRewriteRule (.*)/(.*)/(.*)/$ /$1.php?$2=$3
http://www.example.com/test/
=> http://www.example.com/test.php
http://www.example.com/test/id/5/
=> http://www.example.com/test.php?id=5
http://www.example.com/test/id/5/code/4/
=> does not work
Method 4: example.com/test/id/5/code/4/ => example.com/test.php?id=5&code=4
This method allows the user to pass on exactly two parameter hidden as directory folders.
RewriteEngine onRewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/$ /$1.php?$2=$3&$4=$5
http://www.example.com/test/
=> http://www.example.com/test.php
http://www.example.com/test/id/5/
=> does not work
http://www.example.com/test/id/5/code/4/
=> http://www.example.com/test.php?id=5&code=4
Obviously this has some shortcoming. If anyone knows of a more functional script, please share it.
Help! It’s not working!
If you are in charge of configuring the Apache server, you may need to enable .htaccess in the config file of Apache.
If you are having trouble creating an .htaccess file (Windows will not allow you to rename a file to .htaccess because it has no name, just an extension), start up notepad and save a file as
".htaccess"
(including the quotes).
Now you can copy it wherever you need.
No comments:
Post a Comment