-->

随着瓶,我怎么能起到的robots.txt和sitemap.xml的静态文件吗? [重复](Wi

2019-07-17 14:31发布

这个问题已经在这里有一个答案:

  • 在瓶静态文件-的robot.txt,sitemap.xml的(mod_wsgi的) 9个回答

我读过,在安静的几个地方是提供静态文件应该留给服务器,例如在一对夫妇的答案在这太问题 。 但是我用的是OpenShift PaaS和无法弄清楚如何修改.htaccess文件存在。

我碰到这一段代码 ,从模板提供的地图。 我这样做,我的应用程序同时为地图,和robots.txt的,像这样 -

@app.route("/sitemap.xml")
def sitemap_xml():
    response= make_response(render_template("sitemap.xml"))
    response.headers['Content-Type'] = 'application/xml'
    return response

@app.route("/robots.txt")
def robots_txt():
    return render_template("robots.txt")

这种情况有任何伤害,或者是我的方法好吗?

Answer 1:

robots.txtsitemap.xml为您的应用程序的static目录,并确定这样的观点:

from flask import Flask, request, send_from_directory

@app.route('/robots.txt')
@app.route('/sitemap.xml')
def static_from_root():
    return send_from_directory(app.static_folder, request.path[1:])


Answer 2:

瓶有建于提供静态文件的支持。

做一个/static目录,并把你的文件存在。 然后,当你实例化Flask ,指定static_url_path参数:

app = Flask(__name__, static_url_path='/')

默认值是从静态文件/static/路径,但希望他们担任/所以他们是在预期的位置。

见瓶API文档获取更多信息。

除了开销和不必要的代码,用你的方法的问题是,如果/当你要服务于一个文件中包含的东西,看起来像一个模板标签render_template -你可能会导致渲染错误。 如果你读文件到内存中(一次,方法不是内),然后使用该字符串作为响应的正文,而不调用render_template ,你至少会避免这样的问题。



Answer 3:

最好的办法是到static_url_path设置为根URL

from flask import Flask

app = Flask(__name__, static_folder='static', static_url_path='')


文章来源: With Flask, how can I serve robots.txt and sitemap.xml as static files? [duplicate]