为什么我托管的 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 让我走上正轨。
我已经编写了一个 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 让我走上正轨。