403 при попытке развернуть приложение Flask на GoDaddy - PullRequest
3 голосов
/ 17 марта 2020

При попытке развернуть тестовое приложение Flask на GoDaddy появляется ошибка 403: запрещено. Я установил Python 3.5.7, и файлы, которые я добавил / изменил:

1) создал .htaccess в public_ html:

Options +ExecCGI
AddHandler cgi-script .py
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule /home/myusername/public_html/python/cgi-bin/app.cgi/$1 [L]

2) создал виртуальную среду venv в cgi-bin и установил Flask

3) создал app.cgi в public_html / cgi-bin:

#!/home/myusername/.local/bin/python3
import os
import sys
sys.path.insert(0, '/home/myusername/public_html/cgi-bin/venv/lib/python3.5/site-packages')
from wsgiref.handlers import CGIHandler
activate_this = '/home/myusername/public_html/cgi_bin/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
from app import app
class ProxyFix(object):
    def __init__(self, app):
        self.app = app
    def __call__(self, environ, start_response):
        environ['SERVER_NAME'] = ""
        environ['SERVER_PORT'] = "80"
        environ['REQUEST_METHOD'] = "GET"
        environ['SCRIPT_NAME'] = ""
        environ['QUERY_STRING'] = ""
        environ['SERVER_PROTOCOL'] = "HTTP/1.1"
        return self.app(environ, start_response)
if __name__ == '__main__':
    app.wsgi_app = ProxyFix(app.wsgi_app)
    CGIHandler().run(app)
app.wsgi_app = ProxyFix(app.wsgi_app)
CGIHandler.run(app)

4) создал app.py в public_html / cgi-bin:

from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
    return render_template('home.html')
if __name__ == '__main__':
    app.run()

5) создал home. html в public_html / cgi-bin / templates

Я также изменил разрешения для 755 для этих различных файлов.

У кого-нибудь есть предложения, где я могу ошибаться? Большое спасибо за любое руководство.

1 Ответ

0 голосов
/ 17 марта 2020
RewriteRule /home/myusername/public_html/python/cgi-bin/app.cgi/$1 [L]

Вам не хватает аргумента pattern (first) для директивы RewriteRule - так что это ничего не делает. Вам также следует переписать URL-путь, а не абсолютный путь файловой системы. Таким образом, это должно выглядеть примерно так:

RewriteRule !^python/cgi-bin/app.cgi/ /python/cgi-bin/app.cgi%{REQUEST_URI} [L]

Предполагая, что /public_html является каталогом root документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...