在 URL 中没有额外组件的情况下配置 Django/Apache2/mod_wsgi 时出现问题

Problems getting Django/Apache2/mod_wsgi configured without having extra component in URL

我想要完成的是让 Apache 提供 mysite.com/ 上的所有内容,并让 Django 处理 mydomain.com/signupmydomain.com/login 下的所有内容。

问题是现在用户必须浏览到 mydomain.com/mysite/signupmydomain.com/mysite/login 才能正常工作。我想去掉 URL 的 mysite 部分。

我用

创建了一个项目
django-admin startproject signup mysite
cd mysite
django-admin startapp login

我最终得到了这个目录结构。

mysite
├── login
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── manage.py
└── signup
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    ├── views.py
    └── wsgi.py

我在 signup/urls.py

中有以下 urlpatterns
urlpatterns = [
    url(r'^signup/', views.index, name='index'),
    url(r'^login/', include('login.urls')),
    url(r'^admin/', admin.site.urls),
]

我安装并运行了 Apache mod_wsgi,并且在我的虚拟主机文件中有这个 WSGIScriptAlias。

WSGIScriptAlias /mysite /usr/local/www/wsgi-scripts/mysite/signup/wsgi.py process-group=mysite.com

当用户转到 mydomain.com/mysite/signupmydomain.com/mysite/login 时一切正常。

我想要做的是删除上述 URL 的 'mysite' 部分,这样用户只需浏览到 mydomain.com/signupmydomain.com/login.

我试过了

WSGIScriptAlias /signup /usr/local/www/wsgi-scripts/mysite/signup/wsgi.py process-group=mysite.com
WSGIScriptAlias /login /usr/local/www/wsgi-scripts/mysite/signup/wsgi.py process-group=mysite.com

但这不起作用,因为 Apache 或 mod_wsgi 在到达 Django 之前剥离了 'signup' 或 'login' 部分,而 Django 只是认为用户正在寻找 ' /'.

有什么建议吗?

谢谢

如果您不需要前缀,请不要使用前缀。

WSGIScriptAlias / /usr/local/www/....

尝试使用:

WSGIScriptAlias /signup /usr/local/www/wsgi-scripts/mysite/signup/wsgi.py/signup process-group=mysite.com application-group=%{GLOBAL}
WSGIScriptAlias /login /usr/local/www/wsgi-scripts/mysite/signup/wsgi.py/login process-group=mysite.com application-group=%{GLOBAL}

注意挂载点是如何添加到wsgi.py之后的。还添加了 application-group 选项以确保您在此过程中只获得 Django 应用程序的一个实例。

另一种方式是由 Apache 处理任何静态文件,而其他所有内容都由 WSGI 应用程序处理。 'The Apache Alias Directive' 部分末尾记录了如何执行此操作: