重定向到Firebase托管自定义域

时间:2015-12-10 21:26:59

标签: firebase firebase-hosting

我已经使用Firebase托管设置了自定义域名(例如myapp.domain.com)。

如何重定向(或关闭)默认的Firebase托管网址(例如myapp.firebaseapp.com),以便只能从自定义域访问该应用?

3 个答案:

答案 0 :(得分:11)

您无法关闭子域名。您的应用始终可以通过https://myapp.firebaseapp.com 在您设置的任何自定义域中使用。

要重定向人,您可以在HTML中添加canonical链接:

<link rel="canonical" href="http://myapp.domain.com/" />

在Google网站站长中心博客上了解Specify your canonical中的详情。

答案 1 :(得分:2)

您可以使用Firebase函数。

每月免费125,000次调用-https://firebase.google.com/pricing

使用Express中间件的示例:

// functions/index.js

const functions = require('firebase-functions');
const express = require('express');
const url = require('url');

const app = express();

// Allowed domains
let domains = ['localhost:5000', 'example.com'];
// Base URL to redirect
let baseurl = 'https://example.com/';

// Redirect middleware
app.use((req, res, next) => {
    if (!domains.includes(req.headers['x-forwarded-host'])) {
        return res.status(301).redirect(url.resolve(baseurl, req.path.replace(/^\/+/, "")));
    }
    return next();
});

// Dynamically route static html files
app.get('/', (req, res) => {
    return res.sendFile('index.html', { root: './html' });
});

// ...

// 404 middleware
app.use((req, res) => {
    return res.status(404).sendFile('404.html', { root: './html' });
});

// Export redirect function
exports.redirectFunc = functions.https.onRequest(app);

导出的函数名称必须添加到firebase.json中的重写中,例如:

{
    "hosting": {
        "public": "public",
        "rewrites": [
          {
            "source": "**",
            "function": "redirectFunc"
          }
        ]
    }
}

答案 2 :(得分:1)

除了指定规范链接外,如Frank van Puffelen的答案中所述。我们还可以添加前端JavaScript代码来执行实际的重定向,而无需公开默认网址。

if (location.hostname.indexOf('custom.url') === -1) {
    location.replace("https://custom.url");
}