How to create clean URLs for category strings?
First thing you'll need to do is set up a route that ensures anything for /products/category-name gets routed to the correct template. You can do this from the control panel or via craft/config/routes.php

If you do this in your routes.php file you'd need something like this:

return array(
    'products/(.*?)' =&gt; 'products/index',
);


Which is telling Craft that for any url that contains products/any-characters it should use the products/index template.

Then, on that template, grab the segment that is the category slug

{% set catSegment = craft.request.segment(2) %}


You'll then need to get the category that has that slug

{% set category = craft.categories.slug(catSegment).first() %}


You then have a category model you can work with and can use a craft entries tag with a category criteria using

{% set products = craft.entries.relatedTo(category).find() %}


Loop through products to output your products.