【问题标题】:Redirecting Django root to admin panel将 Django 根目录重定向到管理面板
【发布时间】:2012-03-07 02:46:30
【问题描述】:

我正在尝试将 Django 站点根目录重定向到 Django 管理面板,并且大部分时间都已启动并运行。但是,我注意到除非项目 URL 中有斜杠,否则页面上的链接不包含项目文件夹,而是尝试在站点根目录中查找应用程序。

所以,假设我有一个项目 foo 和一个应用程序 bar。如果您访问http://server/foo/(带有斜杠),一切正常,页面上的链接转到http://server/foo/bar。但是,如果访问http://server/foo,则生成的链接会转到http://server/bar,从而产生404错误。

如果我将WSGIScriptAlias 设置为指向/foo/ 而不是/foo,如果我导航到/foo,则会出现404 错误。我尝试使用重定向在 Apache conf 中强制使用斜杠,但最终生成了递归重定向 (http://server/foo//////...)。我还没有尝试使用 .htaccess 文件,但我怀疑可能会发生同样的事情。

我在urls.py 中尝试过同样的事情,但是:

url(r'^$', redirect_to, {'url': '/'}), # goes to server root http://server/
url(r'^$', redirect_to, {'url': 'foo/'}), # goes to http://server/foo/foo
url(r'^$', redirect_to, {'url': '/foo/'}), # infinite redirect

我还尝试像这样在所有 Django url 上简单地附加一个斜杠:

url(r'^(.*)/', include(admin.site.urls))

但它根本无法匹配项目根文件夹中的任何内容(尽管如果您导航到应用程序,这似乎可以正常工作)。

我正在使用带有 mod_wsgi 的 Apache 2.2,这是配置:

Alias /static "C:/DJANGO~1/apps/django/django/contrib"

<Directory 'C:/DJANGO~1/apps/django/django/contrib'>
  Order allow,deny
  Allow from all
</Directory>

WSGIScriptAlias /foo "C:/Djangostack/apps/django/scripts/django.wsgi"

<Directory 'C:/Djangostack/apps/django/scripts'>
  Order allow,deny
  Allow from all
</Directory>

这是最有效的urls.py

urlpatterns = patterns('',
  url(r'^', include(admin.site.urls)),
)

我已确定 APPEND_SLASH 设置为 True,但它似乎不适用于根项目文件夹。

【问题讨论】:

  • 为什么/foo 会被重定向到/bar?这个重定向发生在哪里?
  • 这并不是真正的/foo 被重定向到/bar - 相反,页面上生成的url 转到/bar 而不是/foo/bar

标签: python django apache django-admin mod-wsgi


【解决方案1】:

尝试在您的settings.py 中将APPEND_SLASH 设置为True。我有一个类似的问题,这为我解决了这个问题。它应该默认为 True 但我必须明确设置它。

【讨论】:

  • 不幸的是,这并没有帮助 - 它可以在任何地方项目根目录。
  • 这不适用于哪个urls.py?请注意,如果 url 与 without 斜杠不匹配的模式不匹配,它只会附加斜杠。
  • 我用r'^'r'^(.*)/'r'^(.*)/$' 尝试过,还是没有成功。我怀疑这意味着配置需要在 Apache 或其他一些系统范围的 Django 设置中进行。
  • 嗯,我很困惑为什么你会通过url(r'^$', redirect_to, '/foo/') 获得无限重定向。我这样做是为了从根重定向到/blog/,它工作正常。您可以在 OP 中发布您的完整 urls.py 吗?
  • 无限重定向似乎发生了,因为它不是从根文件夹转到子文件夹,而是简单地在根文件夹中附加一个斜杠 - 即使附加了那个斜杠,它仍然会匹配 r'^$' .我还意识到我在 OP 中使用了错误的语法 - redirect_to 需要字典,而不是字符串。不过,我在urls.py 中一直在正确使用它。
猜你喜欢
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 2012-06-19
  • 2021-12-25
  • 2018-11-21
  • 2011-11-09
  • 1970-01-01
  • 2014-02-22
相关资源
最近更新 更多