Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 23, 2013 19:03:28

newca9h
Зарегистрирован: 2012-05-28
Сообщения: 46
Репутация: +  3  -
Профиль   Отправить e-mail  

[решено] htaccess Flask

Здравствуйте! В общем, проблема следующая. На хостинге все манипуляции с настройками производятся только с помощью .htaccess и приложение на Flask/Werkzeug некорректно отображает урлы(а именно, к каждому урлу подставляется путь /wsgi.py/ ).

Файл .htaccess:

Options +ExecCGI
AddHandler wsgi-script .py
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /wsgi.py/$1 [QSA,PT,L]
RewriteRule ^(static/.*)$ - [L]
RewriteRule ^(media/.*)$ - [L]

Файл wsgi.py(к нему идут все обращения):

#! /usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
flask_ext = os.path.join(
    os.path.abspath(os.path.dirname(__file__)),
    'flask',
    'ext'
)
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))
sys.path.append(flask_ext)
from myapp import app as application

То есть, сайт открывается, все работает, но вот непонятно почему урлы имеют вид: http://site.com/wsgi.py/contact/ и т.п. Также, почему-то файлы из папки media не подхватываются, а вот файлы из папки static вполне хорошо отображаются.

Спасибо!

P. S. До этого, работал с Django с тем же htaccess и все прекрасно работало без нареканий.
P. P. S. Проблема скорее всего с url_for, так при обращении к http://site.com/contact/ все также работает, кроме media.

В общем, проблему удалось частично решить. Решается добавлением следующего кода в ваш __init__.py:
class WSGIMiddleware(object):
    def __init__(self, app):
        self.app = app
    def __call__(self, environ, start_response):
        environ['SCRIPT_NAME'] = '/'
        return self.app(environ, start_response)

А затем добавим такой код после app = Flask(__name__):
app.wsgi_app = WSGIMiddleware(app.wsgi_app)

UPDATE:

Разобрался, напишу на всякий случай здесь. Суть в том, что файлы из папки media были доступны, но не по адресу: http://site.com/media/, а http://site.com/appname/media/. Решается эта проблема либо объявлением урла или дописыванием в WSGIMiddleware пары строк, но проще всего перенести папку media в папку static. Flask по-умолчанию ищет файлы статики из папки static, это поведение можно переопределить при объявлении приложения: app = Flask(__name__, static_path = ‘ваша папка’). Однако, лучше оставить все как есть, также есть еще много решений, но вроде эти самые годные.

Всем спасибо!)

Отредактировано newca9h (Фев. 26, 2013 17:59:13)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version