-
-
Save aaronpk/5846789 to your computer and use it in GitHub Desktop.
[[email protected] www]$ cat .htaccess | |
RewriteEngine on | |
RewriteCond %{QUERY_STRING} resource=acct:(.+) | |
RewriteRule ^\.well-known/webfinger /profile/%1? [L] | |
[[email protected] www]$ cat profile/[email protected] | |
{ | |
"subject": "acct:[email protected]", | |
"links": [ | |
{ | |
"rel": "http://webfinger.net/rel/avatar", | |
"href": "http://aaronparecki.com/images/aaronpk.png" | |
}, | |
{ | |
"rel": "http://webfinger.net/rel/profile-page", | |
"href": "http://aaronparecki.com/" | |
}, | |
{ | |
"rel": "me", | |
"href": "http://aaronparecki.com/" | |
} | |
] | |
} | |
Actually there are three problems with this:
- URL-encoded query parameters are not unescaped prior to the mod_rewrite match
- the content-type is not set
- CORS headers are missing
Here's my version:
<Directory /var/www/profile>
DefaultType application/json
Header set Access-Control-Allow-Origin: "*"
</Directory>
RewriteEngine on
RewriteMap unescape int:unescape
RewriteCond ${unescape:%{QUERY_STRING}} resource=acct:(.+)
RewriteRule ^/.well-known/webfinger /profile/${unescape:%1}? [last]
This passes all of the checks on http://webfinger.net/
I had to change the rewrite rule to this to make it work:
RewriteRule ^/.well-known/webfinger /profile/%1? [L]
(forward slash instead of backslash)
You need a / (unlike @aaronpk) because your RewriteBase is different. You should still have the \ to escape the ., i.e. you should use:
RewriteRule ^/\.well-known/webfinger /profile/%1? [L]
Otherwise the rule will match a small number of (probably harmless) spurious URLs, e.g. https://example.com/Awell-known/webfinger (note letter A): the . is a wildcard: escaping it means a literal dot.
Should there be a file or folder called webfinger
in the .well-known
folder?
@sorenpeter asked:
Should there be a file or folder called
webfinger
in the.well-known
folder?
No, the RewriteCond
and RewriteRule
tells Apache, "when somebody asks for /.well-known/webfinger?resource=acct:SOMETHING
, instead serve them /profile/SOMETHING
". This then allows you to store static files in /profile/...
for each user account represented by webfinger and it pretty-much "just works".
If the rules are working properly, you'll never need an actual file at /.well-known/webfinger
.
I had to change the rewrite rule to this to make it work:
(forward slash instead of backslash)