4
votes

Possible Duplicate:
using seo user friendly in php
Custom routing in code ingniter

I'm deving a CMS and I wanna use User-friendly URLs instead of Query Strings.

e.g.:

mysite.com/cat_1 => mysite.com/cat_1/itme_1

instead of

mysite.com/?cat=1 => mysite.com/?item=1

How should I implement this? any standard way?

My idea is to use of semi-dynamic pages and generating static snapshots with user-friendly URLS of dynamic pages that use query strings.

5
@MikeBrown - not exactly... he doesn't need routing, just basic URL rewriting.Steven Moseley
@jeroen - Again, not a duplicate. That's another example of routing. This is URL rewriting, no PHP involved.Steven Moseley
@TheSmose I would agree but I think if he's writing a CMS he wants to use routing rather than requiring the CMS admin to edit .htaccess or muck with mod_rewrite to add a new path.Michael Brown

5 Answers

3
votes

This is accomplished through the use of .htaccess to modify how the URL is sent to the client. Or as other people say, to prettify the URL. Here are some links to articles to help you get started with the mod_rewrite rules required to make this function.

http://net.tutsplus.com/tutorials/other/using-htaccess-files-for-pretty-urls/

http://www.roscripts.com/Pretty_URLs_-_a_guide_to_URL_rewriting-168.html

2
votes

You want to use .htaccess to rewrite your URLs internally and route them appropriately to your application.

Here's a specific .htaccess example that will do what you're looking for:

RewriteEngine on
RewriteRule ^cat_([0-9]*) /?cat=$1 [N,QSA]
RewriteRule ^item_([0-9]*) /?item=$1 [N,QSA]

Just put the above in a file called .htaccess in your root web folder, and you'll be good to go.

Note that you may have to enable mod-rewrite in your apache server if it's not already enabled (most shared hosting providers have it enabled)

1
votes

This functionality cannot be implemented using only PHP. You need to configure URL rewriting for your HTTP server, which will transform the user-friendly URLs into query strings which your scripts can understand. In the case of Apache, you should look into mod_rewrite, which can usually be configured through .htaccess files.

1
votes

use asp.net mvc you get it for free ;) but in all seriousness I think PHP has a web engine (code igniter)that provides advanced routing too. Also, you can role your own using some Apache black magic

1
votes

You can use a framework like Codeigniter: http://ellislab.com/codeigniter

And review: http://ellislab.com/codeigniter/user-guide/general/urls.html

You will need to activate the mod_rewrite and create the file .htaccess

.htaccess with Codeigniter:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?$1 [L]    
</IfModule>

Then you can use:

example.com/class/function/ID

I hope that is helpful.

Regards.