Nothing is worse than an ugly URL. Well, Hitler was quite bad, but so are ugly URL’s. Not only are they ugly for your users, but as clever as google is, they are ugly for it too. How is google supposed to know that “products/index.php?cat=3&id=46″ is an iPod nano? Today we will be looking at making the sexiest thing in the world, nice URL’s. Jessica Alba isn’t bad either.
Yii makes it insanely easy to rewrite URL’s to whatever you want. All of it is done in our config/main.php. Let’s open that bad boy up and see what’s inside. If you scroll down to around line line 34ish you will see the urlManager. If we uncomment this we get much nicer URL’s straight away. Insead of having ugly variables in the URL we will now have pretty good looking controller/action URL’s. So if we are using our product controller and looking at the browser action the URL would look like “index.php/product/browse”. Not to bad, but what about the index.php? We can take that out using our .htaccess file. Nobody understands. htaccess files, so instead of trying to write your own, just download this one that my friend William gave me. Click here to download it.
Just chuck that in your root directory and you never have to see and index.php again. Now, what about custom URL’s? We want the URL to look like it is an apple iPod. Let’s pretend that the URL now looks like “products/browse/prod/46″. Like I said early, we can make it look like whatever we want! Open up your main/config.php again, and scrolldown to somewhere around line 37ish. You will see:
'<controller:\w+>/<id:\d+>'=>'<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
That is Yii’s URL rewriting at work. Now, above that we can add the line:
Thats it. Now when Yii follows the link “catalogue/apple/ipod” the controller/view variable/value it will open is “products/browse/prod/46″ but the URL will be sexy. Told you it was easy. Stay tuned for our advanced tutorial on dynamic URL rewriting coming one day soon.