在 URL 中没有额外组件的情况下配置 Django/Apache2/mod_wsgi 时出现问题
Problems getting Django/Apache2/mod_wsgi configured without having extra component in URL
我想要完成的是让 Apache 提供 mysite.com/ 上的所有内容,并让 Django 处理 mydomain.com/signup
和 mydomain.com/login
下的所有内容。
问题是现在用户必须浏览到 mydomain.com/mysite/signup
或 mydomain.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/signup
或 mydomain.com/mysite/login
时一切正常。
我想要做的是删除上述 URL 的 'mysite'
部分,这样用户只需浏览到 mydomain.com/signup
或 mydomain.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' 部分末尾记录了如何执行此操作:
我想要完成的是让 Apache 提供 mysite.com/ 上的所有内容,并让 Django 处理 mydomain.com/signup
和 mydomain.com/login
下的所有内容。
问题是现在用户必须浏览到 mydomain.com/mysite/signup
或 mydomain.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
中有以下 urlpatternsurlpatterns = [
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/signup
或 mydomain.com/mysite/login
时一切正常。
我想要做的是删除上述 URL 的 'mysite'
部分,这样用户只需浏览到 mydomain.com/signup
或 mydomain.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' 部分末尾记录了如何执行此操作: