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

Why is my hosted Django app showing my username in the URL?

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

如能提供任何有关解决此问题的建议,我将不胜感激。

成功了!

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

我应该指出的一件事是绝对路径被插入到重定向中 - 所以如果我访问 http://example.com/terms 它会重定向到 http://example.com/terms/ 并将路径插入 URL.

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

感谢 this question 让我走上正轨。