Файл .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 = ‘ваша папка’). Однако, лучше оставить все как есть, также есть еще много решений, но вроде эти самые годные.
Всем спасибо!)