phacility/phabricator · error · Exception
This blog is not visible to logged out users, so it can not
Error message
This blog is not visible to logged out users, so it can not be visited from a custom domain.
What it means
PhameBlogSite::getSiteByDomain resolves the request Host with an anonymous (logged-out) PhabricatorUser as viewer and only ACTIVE blog statuses. If the blog at that custom domain throws PhabricatorPolicyException - its View policy is stricter than Public - the site wraps it as a plain Exception: the blog exists, but logged-out visitors can never read it, so custom-domain routing cannot proceed.
Source
Thrown at src/applications/phame/site/PhameBlogSite.php:50
if (!$this->isPhameActive()) {
return null;
}
$host = $request->getHost();
try {
$blog = id(new PhameBlogQuery())
->setViewer(new PhabricatorUser())
->withDomain($host)
->needProfileImage(true)
->needHeaderImage(true)
->withStatuses(
array(
PhameBlog::STATUS_ACTIVE,
))
->executeOne();
} catch (PhabricatorPolicyException $ex) {
throw new Exception(
pht(
'This blog is not visible to logged out users, so it can not be '.
'visited from a custom domain.'));
}
if (!$blog) {
return null;
}
return id(new PhameBlogSite())->setBlog($blog);
}
public function new404Controller(AphrontRequest $request) {
return new PhameBlog404Controller();
}
public function getRoutingMaps() {
$app = PhabricatorApplication::getByClass('PhabricatorPhameApplication');View on GitHub (pinned to 5720a38cfe)
Solutions
- Set the blog's View Policy to Public (Phame > blog > Edit Policies) so anonymous visitors can read it
- Verify the blog status is Active - archived blogs do not resolve on custom domains either
- Confirm the configured custom domain matches the Host header exactly (apex vs www)
Defensive patterns
Strategy: validation
Validate before calling
// Before binding a custom domain, require anonymous visibility
if ($blog->getViewPolicy() !== PhabricatorPolicies::POLICY_PUBLIC) {
throw new Exception('Blog view policy must be Public to serve a custom domain.');
} Prevention
- Set a Phame blog to Public view policy before configuring its custom domain
- Keep the blog Active - archived blogs stop resolving
- Test custom domains in a logged-out/incognito browser session
When it happens
Trigger: A custom domain is bound to a Phame blog whose View Policy is 'All Users', 'Administrators', or a project policy; navigating to http://blog.example.com while not logged in; the policy was tightened after the domain was configured.
Common situations: Operators set up a custom domain but forget the public-visibility requirement; internal blogs accidentally given domains; SSO-gated installs where 'All Users' still blocks anonymous readers.
Understand the failure class
Background: Permission denied / not authorized / 403 Forbidden: access-control rejections when the caller lacks the required role, grant, or ownership — this error's family across 18 libraries.
Related errors
- err:policy
- You can not make that edit, because it would remove your abi
- Job actor does not have permission to edit job.
- Unable to change ownership of an identity file to daemon use
- Failed to create directory "%s" for specified log file (with
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/f5be485bc2de3fcc.
Report an issue: GitHub.