I list about 9,000 records on my little site. At the moment I'm showing them with a dynamic page, like


But I'd like to start using meaningful URLs like this one on Amazon


where the title string on the root level gets ignored and requests are redirected to the records.php page, which accepts the ID as usual.

Does anybody know how I could achieve that with mod_rewrite? I'm wondering how I'd deal with requests to my other root-level pages, like http://domain.com/contact.php, that I don't want to redirect to the records page.

  • mod_rewrite supports regular expressions, so you'll probably end up using a regular expression that matches /[title-string]/[id] (such as ^/[\w-]*/(\d+)$), and redirect that ignoring the title string. Unfortunately I don't have enough mod_rewrite experience to tell you the syntax off the top of my head!
    – jtbandes
    Commented Jun 25, 2011 at 7:36

1 Answer 1


Try this in your root's .htaccess:

RewriteEngine on
RewriteRule ^[^/]+/(\d+)$ records.php?id=$1 [QSA]

http://example.com/foo-bar/42 will be rewritten to http://example.com/records.php?id=42

It wont affect URLs like contact.php, since it does not match ^[^/]+/(\d+)$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.