我已经编写了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)
如果能找到解决该问题的指针,我将不胜感激。
答案 0 :(得分:0)
让它正常工作!
在修改后的passenger_wsgi.py中,我更改了
SCRIPT_NAME = os.getcwd()
至
SCRIPT_NAME = ''
我应该指出的一件事是,绝对路径已在重定向中插入-因此,如果我访问过
http://example.com/terms
它将重定向到
http://example.com/terms/
并在URL中插入路径。
在调试时,我建议禁用缓存,因为当我所做的更改似乎没有生效时,这使我陷入了几次循环。
感谢this question使我步入正轨。