如何将子域的所有页面永久重定向到 www 域的子路径?

How to permanently redirect all pages of a subdomain to a sub-path of the www domain?

例如我有这个网站:

我仍然托管那个旧网站,但我把它移到了这里:

我希望每个旧页面都指向每个新页面。像这样的永久重定向:

https://www.neuraxle.neuraxio.com/* ==> https://www.neuraxio.com/en/neuraxle/*

我是否需要为此托管一个服务器来手动编写一个 Python Flask 应用程序来重定向每个 URL 自定义重写?我想避免使用 DNS 对此进行编码。我可以使用 DNS 技巧吗?我使用 GoDaddy 来管理我的 DNS。

可选:如果DNS没有什么可做的,你能提供一个示例Flask URL处理程序方法吗?是否有免费的托管服务可供我托管此 Flask 应用程序?

您应该能够使用 RewriteEngine.htaccess 文件进行重定向,您应该在您的网络根目录中或通过您的主机控制面板使用正则表达式访问该文件。由于你的措辞,我有点不确定移动的方向,所以为了以防万一,这里有两个方向和一些参考。

如果您想从 subdomain to folder 重定向(根据您的示例,这似乎更有可能),您可以这样做:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.neuraxle\.neuraxio.\com$
RewriteCond %{REQUEST_URI} !^/en/neuraxle
RewriteRule ^(.*)$ /en/neuraxle/ [L,NC]

如果你想从 folder to subdomain 重定向,你可以这样做:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.neuraxio.com
RewriteRule ^en/neuraxle/(.*)$ http://www.neuraxle.sample.com/ [L,R=301]

一些额外的参考资料:

编辑: 另一个想法取决于部署 option/platform 你已经使用了你在问题中没有提到的。

实际上,再想想,GoDaddy 确实允许 DNS 重定向。去 在右侧页面底部附近会有转发部分:

在 SUBDOMAIN 中输入:www.neuraxle 并在 FORWARD TO select https:// 中输入 www.neuraxio.com/en/neuraxle/,这应该可以解决问题。我会保留 mod_rewrite 信息以防万一。

这应该有帮助。

有时您需要编写一个网站,它只是从一个域重定向到另一个域。例如,您可能在 yourusername.pythonanywhere.com 上创建了一个网站,并且它变得非常流行,以至于您决定升级到付费计划并将其托管在 www.yourdomain.com 上——但是那里有很多链接转到旧域,您希望他们继续工作。

最好的解决方案是在 yourusername.pythonanywhere.com 建立一个简单的网站 运行,当它收到请求时,会将用户重定向到新域——因此请求 http://yourusername.pythonanywhere.com/something are redirected automatically to http://www.yourdomain.com/something等等。

为此,您需要在两个域的 "Web" 选项卡上都有一个网站; www.yourdomain.com 上的是您的主站点,yourusername.pythonanywhere.com 上的是一个使用 Python 3.6 的简单 Flask 应用程序,flask_app.py 文件中有以下代码:

from flask import Flask, redirect, request

app = Flask(__name__)

from urllib.parse import urlparse, urlunparse

FROM_DOMAIN = "yourusername.pythonanywhere.com"
TO_DOMAIN = "www.yourdomain.com"

@app.before_request
def redirect_to_new_domain():
    urlparts = urlparse(request.url)
    if urlparts.netloc == FROM_DOMAIN:
        urlparts_list = list(urlparts)
        urlparts_list[1] = TO_DOMAIN
        return redirect(urlunparse(urlparts_list), code=301)

或尝试以下方法

How to redirect to an external domain in Flask?

这个有效,接受的赏金答案很差:

@app.before_request
def redirect_to_new_domain():
    FROM_DOMAINS = ['0.0.0.0:' + str(PORT), 'https://www.neuraxio.com', 'www.neuraxio.com', "neuraxio.com"]
    SUBPATH = "/en/neuraxle"
    TO_DOMAIN = 'www.neuraxle.org'
    urlparts = urlparse(request.url)
    print(urlparts, urlparts.netloc)
    if urlparts.netloc in FROM_DOMAINS and SUBPATH in urlparts.path:
        parsed = urlparts
        parsed = parsed._replace(netloc=TO_DOMAIN)
        parsed = parsed._replace(path=urlparts.path.replace(SUBPATH, ""))
        return redirect(parsed.geturl(), code=301)

注意:我自己在这里的回答并没有完全回答原始问题,但至少可以编译。正如我现在回答的那样,我们也需要这个,除了我们还有一个子路径可以从而不是重定向到。