为什么我托管的Django应用在URL中显示我的用户名?

时间:2019-01-30 12:15:27

标签: django shared-hosting

我已经编写了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)

如果能找到解决该问题的指针,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

让它正常工作!

在修改后的passenger_wsgi.py中,我更改了 SCRIPT_NAME = os.getcwd()SCRIPT_NAME = ''

我应该指出的一件事是,绝对路径已在重定向中插入-因此,如果我访问过 http://example.com/terms 它将重定向到 http://example.com/terms/ 并在URL中插入路径。

在调试时,我建议禁用缓存,因为当我所做的更改似乎没有生效时,这使我陷入了几次循环。

感谢this question使我步入正轨。