updated branch; fold discussion of rejected version into a toggleable

master
http://smcv.pseudorandom.co.uk/ 2010-10-01 22:43:52 +00:00 committed by Joey Hess
parent 922e149de9
commit 3740f78757
1 changed files with 48 additions and 17 deletions

View File

@ -59,6 +59,9 @@ becoming a problem for me. Is there anything I can do here? --[[Perry]]
---- ----
[[!toggle id="smcv-https" text="Some discussion of a rejected implementation, smcv/https."]]
[[!toggleable id="smcv-https" text="""
[[!template id=gitbranch branch=smcv/https author="[[smcv]]"]] [[!template id=gitbranch branch=smcv/https author="[[smcv]]"]]
For a while I've been using a configuration where each wiki has a HTTP and For a while I've been using a configuration where each wiki has a HTTP and
@ -140,33 +143,61 @@ you don't like my approach:
>> making it easier to run two mostly-synched copies like I was previously >> making it easier to run two mostly-synched copies like I was previously
>> doing is the only solution... --s >> doing is the only solution... --s
"""]]
---- ----
**warning: untested branch ** [[!template id=gitbranch branch=smcv/localurl author="[[smcv]]"]] [[!template id=gitbranch branch=smcv/localurl author="[[smcv]]"]]
OK, here's an alternative approach, closer in spirit to what was initially OK, here's an alternative approach, closer in spirit to what was initially
requested. I haven't tested this at all (it's getting rather late in UK time) requested. I haven't tested this on a full website with the CGI yet.
and it will probably be rebased later, but I've referenced it here as a proof of
concept.
The idea is that in the common case, the CGI and the pages will reside on the The idea is that in the common case, the CGI and the pages will reside on the
same server, so they can use "semi-absolute" URLs (`/ikiwiki.cgi`, `/style.css`, same server, so they can use "semi-absolute" URLs (`/ikiwiki.cgi`, `/style.css`,
`/bugs/done`) to refer to each other. My branch adds config options which `/bugs/done`) to refer to each other. Most redirects, form actions, links etc.
could be set as follows for ikiwiki.info or any branchable.com site: can safely use this form rather than the fully-absolute URL.
* local_url: / The initial version of the branch had config options `local_url` and
* local_cgiurl: /ikiwiki.cgi `local_cgiurl`, but they're now automatically computed by checking
whether `url` and `cgiurl` are on the same server with the the same URL
Most redirects, form actions, links etc. can safely use this form rather than scheme. In theory you could use things like `//static.example.com/wiki/`
the fully-absolute URL. If not configured, these options default to the and `//dynamic.example.com/ikiwiki.cgi` to preserve choice of http/https
corresponding absolute URL, which is would also be correct for unusual sites
where the CGI and the pages aren't on the same server.
(In theory you could use things like `//static.example.com/wiki/` and
`//dynamic.example.com/ikiwiki.cgi` to preserve choice of http/https
while switching server, but I don't know how consistently browsers while switching server, but I don't know how consistently browsers
suppot that.) suppot that.
"local" here is short for "locally valid", because these URLs are neither "local" here is short for "locally valid", because these URLs are neither
fully relative nor fully absolute, and there doesn't seem to be a good name fully relative nor fully absolute, and there doesn't seem to be a good name
for them... for them...
New API added by this branch:
* `urlto(x, y, 'local')` uses `$local_url` instead of `$config{url}`
* `IkiWiki::baseurl` has a new second argument which works like the
third argument of `urlto`
* `IkiWiki::cgiurl` uses `$local_cgiurl` if passed `local_cgiurl => 1`
* `IkiWiki::cgiurl` omits the trailing `?` if given no named parameters
except `cgiurl` and/or `local_cgiurl`
Bugs:
* I don't think anything except `openid` calls `cgiurl` without also
passing in `local_cgiurl => 1`, so perhaps that should be the default;
`openid` uses `cgiurl` anyway, so there doesn't even necessarily need
to be a way to force absolute URLs? Any other module that really needs
an absolute URL could use `cgiurl(cgiurl => $config{cgiurl}, ...)`,
although that does look a bit strange
* It occurs to me that `IkiWiki::cgiurl` could probably benefit from being
exported? Perhaps also `IkiWiki::baseurl`?
* Or, to reduce use of the unexported `baseurl` function, it might make
sense to give `urlto` a special case that references the root of the wiki,
with a trailing slash ready to append stuff: perhaps `urlto('/')`,
with usage like this?
do_something(baseurl => urlto('/', undef, local)`);
do_something_else(urlto('/').'style.css');
IkiWiki::redirect(urlto('/', undef, 1));