I’m trying to rewrite URLs as follows:
- http://www.example.com/module-name(/) => handler.php?module=module-name
- http://www.example.com/module-name/list/of/arguments(/) => handler.php?module=module-name&args=list/of/arguments (which I explode later in the script)
If module-name is missing or not allowed, it loads the home page of the website. No problems here.
The problem is that mod_rewrite isn’t working as it should. I wrote these rewrite rules…
RewriteEngine On
RewriteRule ^([^/]*)/?$ handler.php?module=$1
RewriteRule ^([^/]+)/(.+)/?$ handler.php?module=$1&args=$2
…but instead of passing module-name as module to the handler, the rewrite engine passes the name of the script itself, handler.php. I tried with different regex in the last two days, but the result is always the same. I don’t know what to do anymore!
The rewrite rules are inside an .htaccess, placed in the document root (together with handler.php), and I’m running xampp on an Ubuntu 11.10 64-bit machine.
Thanks in advance!
Yep, after rewrite occurs, it goes to next cycle instead of existing immediately as you would expect.
You need to alter your rule (or add separate condition) to ignore requests to
handler.phpfile. For example:or with extra separate condition:
or even like that:
You can also go even this way (it really depends on your rewriting logic)