RRipley
Provided stuff for
- CleanUrls - multiple hostnames with different paths pointing to the same wiki
- PITS 01266 - refcount uses invalid XHTML markup
Well, I'm using the variant .htaccess and pmwiki.php in the Same Directory.
Works fine if you've attached one hostname to one address.
I then needed a solution to access my wiki by
http://example.com/in/this/subdir/
and
http://subdomain.example.com/
pointing to the same wiki.
Here's the result (for Apache 2.2 and later):
RewriteEngine On
# No RewriteBase since we Base ourselves
RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$ [NC]
RewriteRule .? - [E=REWRITEBASE:/]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule .? - [E=REWRITEBASE:/in/this/subdir/]
# more RewriteCond-RewriteRule pairs may follow further hostnames
RewriteRule ^$ %{ENV:REWRITEBASE}pmwiki.php [L]
RewriteRule ^index\.php$ %{ENV:REWRITEBASE}pmwiki.php [L]
RewriteRule ^([A-Z0-9\xa0-\xff].*)$ %{ENV:REWRITEBASE}pmwiki.php?n=$1 [QSA,L]
First of all, RewriteBase cannot be used anymore, because there's no conditional form of it.
Additionally I use a server environment variable to store the path that points to the wiki directory.
So, a RewriteCond matches against a hostname via %{HTTP_HOST} and if the pattern matches, the immediately following RewriteRule is used: match whatever (=.?), keep it unchanged (=-) and set the environment variable REWRITEBASE to the specified path (must precede and follow a /). This combination can be done multiple times for every hostname you use on the same wiki.
Once the environment variable is set, it prepends each pmwiki.php in the following rules.
Unfortunately a default value for REWRITEBASE can't be set before Rewriting by
SetVar REWRITEBASE /
since the SetVar module is one of the latest being executed within Apache. The SetVarIf module would work indeed, but didn't checked it out further.
RRipley 2011-09-16 10:30pm UTC