【发布时间】:2019-01-30 12:15:27
【问题描述】:
我编写了一个 Django 应用程序,我正在尝试在共享网络托管 (A2) 上进行设置。它的工作,除了当我去:
http://example.com/terms/
浏览器栏中的 URL 更改为:
http://example.com/home/myusername/myappfolder/myappname/terms/
显示我的应用在磁盘上的完整路径。
静态文件不会发生这种情况 - 例如http://example.com.com/static/image.png 工作正常。
应用在虚拟环境中运行。我正在使用 python 3.6.8 和 Django 2.1.4。
我按照these instructions 设置了我的应用程序,其中包括设置这个passenger.wsgi 文件,如下所示:
import myapp.wsgi
SCRIPT_NAME = '/home/username/myapp'
class PassengerPathInfoFix(object):
"""
Sets PATH_INFO from REQUEST_URI because Passenger doesn't provide it.
"""
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
from urllib.parse import unquote
environ['SCRIPT_NAME'] = SCRIPT_NAME
request_uri = unquote(environ['REQUEST_URI'])
script_name = unquote(environ.get('SCRIPT_NAME', ''))
offset = request_uri.startswith(script_name) and len(environ['SCRIPT_NAME']) or 0
environ['PATH_INFO'] = request_uri[offset:].split('?', 1)[0]
return self.app(environ, start_response)
application = myapp.wsgi.application
application = PassengerPathInfoFix(application)
如果有任何关于在哪里解决这个问题的建议,我将不胜感激。
【问题讨论】:
-
谢谢你,这让我走上了解决方案的正确轨道。
标签: django shared-hosting