KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I'm working on a website running on a shared Apache v2.2 server, so all configuration is via .htaccess files, and I wanted to use mod_rewrite to map URLs to the filesystem in less-than-completely-straightforward way. Just for example's sake, let's say that what I wanted to do was this: Map URL www.mysite.com/Alice to filesystem folder /public_html/Bob Map URL www.mysite.com/Bob to filesystem folder /public_html/Alice Now, after several hours work carefully designing the ruleset (the real one, not the Alice/Bob one!) I put all my carefully crafted rewriting rules in a .htaccess file in /public_html, and tested it out ...only to get a 500 server error! I'd been caught out by a well documented "gotcha!" in Apache: When mod_rewrite rules are used inside a .htaccess file, a re-written URL is re-submitted for another round of processing (as if it were an external request). That happens so that any rules in the target folder of the re-written request can be applied, but it can result in some very counter-intuitive behaviour by the webserver! In the above example, that means that a request for www.mysite.com/Alice/foo.html gets rewritten to /Bob/foo.html , and then resubmitted (internally) to the server as a request for www.mysite.com/Bob/foo.html . This is then re-rewritten back to /Alice/foo.html and resubmitted, which causes it to get re-re-rewritten to /Bob/foo.html , and so on; an infinite loop ensues... broken only by a server timeout error. The question is, how to ensure that a .htaccess mod_rewrite ruleset only gets applied ONCE? The [L] flag in a RewriteRule stops all further rewriting during a single pass through the ruleset , but doesn't stop the entire ruleset from being re-applied after the re-written URL is resubmitted to the server.
Tags (comma-separated)
Save Edits
Cancel