Hello.
I am deploying a django site for the first time to a cpanel server with phusion passenger on cloudlinux and i have discovered a weird phenomenon that can’t be normal.
When I go to the site homepage the URL displays as defined in the URLconf but when I click on any link the target page loads fine but the url displays the full directory path to the app location on the server.
So, for example, rather than
https://website.net/django_app
I get -
https://website.net/home/userdir/django_site/django_app
I don’t even know where to begin to troubleshoot this as all the deployment settings were straightforward but I have clearly done something wrong somewhere.
Here is my passenger_wsgi.py file which I got from a bit of research as the cpanel automatically generated passenger_wsgi does not work ;
1 import os
2 import sys
3
4 import django.core.handlers.wsgi
5 from django.core.wsgi import get_wsgi_application
6
7 # Set up paths and environment variables
8 sys.path.append(os.getcwd())
9 os.environ['DJANGO_SETTINGS_MODULE'] = 'django_site.deployment_settings'
10
11 # Set script name for the PATH_INFO fix below
12 SCRIPT_NAME = os.getcwd()
13
14 class PassengerPathInfoFix(object):
15 """
16 Sets PATH_INFO from REQUEST_URI because Passenger doesn't provide it.
17 """
18 def __init__(self, app):
19 self.app = app
20
21 def __call__(self, environ, start_response):
22 from urllib.parse import unquote
23 environ['SCRIPT_NAME'] = SCRIPT_NAME
24 request_uri = unquote(environ['REQUEST_URI'])
25 script_name = unquote(environ.get('SCRIPT_NAME', ''))
26 offset = request_uri.startswith(script_name) and len(environ['SCRIPT_NAME']) or 0
27 environ['PATH_INFO'] = request_uri[offset:].split('?', 1)[0]
28 return self.app(environ, start_response)
29
30 # Set the application
31 application = get_wsgi_application()
32 application = PassengerPathInfoFix(application)
I hope somebody can help,
Thanks.