如何让mod_wsgi仅处理Apache下某些特定的URL?

如何让mod_wsgi仅处理Apache下某些特定的URL?

我有一个处理“/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 部署在域或虚拟主机的根目录中。

相关内容