我有一个处理“/admin/”和“/myapp/”的 Django 应用程序。所有其他请求都应由 Apache 处理。
我尝试过使用 LocationMatch,但这样就必须编写一个否定正则表达式。我尝试过使用带有 /admin/ 前缀的 WSGIScriptAlias,但 wsgi_handler 收到的请求中 /admin/ 部分被截断了。
有没有更干净的方法让 mod_wsgi 仅处理某些请求?
答案1
使用:
WSGIScriptAliasMatch ^/(admin|myapp) /some/path/django.wsgi/$1
这应该将 SCRIPT_NAME 保留为网站的匹配根,以便 urls.py 仍然适用于以 admin 和 myapp 开头的条目。
答案2
对于我来说,只需在我的 apache 配置中使用别名就可以了:
Alias /media /sites/mysite.org/www/media
<Location /media>
Order allow,deny
Allow from all
</Location>
它在 mod_wsgi 接近它之前就被处理了。
摘自 Django 书籍http://www.djangobook.com/en/beta/chapter21/:
如果您将 Django 部署在子目录中(即比“/”更深的某个地方),Django 将不会从 URL 模式中剪掉 URL 前缀。因此,如果您的 Apache 配置如下所示:
<Location "/mysite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonDebug On
</Location>
所有 URL 模式都需要以“/mysite/”开头。因此,我们通常建议将 Django 部署在域或虚拟主机的根目录中。