【问题标题】:Non-root routing with Django and Apache使用 Django 和 Apache 进行非根路由
【发布时间】:2013-01-25 18:31:27
【问题描述】:

我正在尝试让 Apache 为 Django 提供服务,但我希望它比我现在实现的愚蠢方式更灵活。目前,我的 httpd_wsgi.conf 有这一行:

WSGIScriptAlias / /Library/WebServer/Documents/acdc/apache/promotions.wsgi

在我项目的 urls.py 中,我有这一行:

url(r'^chicken/login/', 'login'),

如果我在浏览器的地址栏中输入http://www.example.com/chicken/login,我会被路由到相应的登录功能。如果 urls.py 中的所有模式都以 'chicken' 开头,那么一切正常。

不过,我想要的是能够切换部署此应用程序的 URL。例如,如果我想让http://www.example.com/monkey/login 工作怎么办?现在我必须更改我所有的 URL 和所有链接,这很愚蠢。如果我更改了 WSGIScriptAlias,这似乎应该是微不足道的:

WSGIScriptAlias /monkey/ /Library/WebServer/Documents/acdc/apache/promotions.wsgi

那么我可以让我的网址看起来像:

url(r'^login/', 'login'),

并摆脱耦合。问题是,经过一个小时的反复试验和研究,我无法让它发挥作用。使用刚才的配置导航到 http://www.example.com/monkey/login 会在日志中显示这个 Apache 错误:

Target WSGI script not found or unable to stat: /Library/WebServer/Documents/acdc/apache/promotions.wsgilogin

所以看起来“登录”路由只是被附加到启动我的 Django 应用程序的promotions.wsgi 文件中。

总而言之,我希望 Apache “吞下” URL 的一部分,并将其余部分用于与我在 urls.py 中的模式进行模式匹配。我该怎么做?

【问题讨论】:

  • 这应该可以工作 - 它被记录为在 Django 和 mod_wsgi 站点上都可以工作。如果省略路径的尾部斜杠会发生什么:/monkey
  • 哦,看在上帝的份上。那解决了它。我发誓我在试图解开这个问题时同时阅读了 Django 和 mod_wsgi dox。
  • 这对我也有用 - 如果有办法接受评论作为答案!

标签: django apache


【解决方案1】:

对于那些想要拥有 2 个 WSGIScriptAliases 的人,其中一个是根目录,另一个是子目录。 请务必将它们按正确的顺序排列:

WSGIScriptAlias /game /var/www/game/game.wsgi
WSGIScriptAlias / /var/www/landing/landing.wsgi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 2014-02-05
    • 2015-02-22
    • 2020-10-31
    • 2013-12-08
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多