Здравствуйте! В общем, проблема следующая. На хостинге все манипуляции с настройками производятся только с помощью .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)