【问题标题】:django urlconf or .htaccess troubledjango urlconf 或 .htaccess 麻烦
【发布时间】:2010-03-29 09:48:38
【问题描述】:

我正在从网站的子文件夹运行我的 django 项目。假设我的项目要打开的地址是。

http://example.com/myproject/

myproject 文件夹是我的用户帐户的根文件夹。在那个文件夹中,我有启动我的项目的 fcgi 脚本。文件夹中的 .htaccess 文件包含以下内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ mysite.fcgi/$1 [QSA,L]

问题在于,在某些情况下,不是像这样将用户重定向到页面

http://example.com/myproject/social/someurl/

它重定向到

http://example.com/social/someurl/

这不起作用。我想知道的是如何解决这个问题。

在 django-socialauth (github.com/uswaretech/Django-Socialauth) 中重定向,socialauth.views.py 第 177 行重定向不带 /myproject/,类似于上面的通用示例。我还在项目中使用 django cms2.0,它将管理员身份验证的用户重定向到 example.com/en/myproject/admin/,而不是 example.com/myproject/en/admin。但这可能是 django cms 的问题。

这种行为是 django 的问题,我应该用 urconf 更改它并将 myproject 添加到所有 url,还是应该使用 .htaccess 来执行此操作?我发现了类似的问题,可悲的是,仍然没有答案: How to write .htaccess if django project is in subfolder and subdomain?

艾伦。

【问题讨论】:

  • "在某些情况下"??哪些具体情况不起作用?
  • @Zatatzz:请不要将 cmets 添加到您拥有的问题中。请更新问题。请使用您的信息更新问题,然后删除评论。

标签: django .htaccess django-urls


【解决方案1】:

似乎 django-cms-2.0 使用中间件级别将语言环境前缀添加到 url。确实很好。

但更有趣的是,它们使用 resolve('pages-root') 为所有 url 添加前缀

所以,您也许可以在 urls.py 中执行此操作...

if not settings.DEBUG:
    urlpatterns += patterns('',
       url(r'^myproject/$', details, {'slug':''}, name='pages-root')
    )

只需确保在 cms.urls 之前附加上述 urlpatterns。

【讨论】:

  • 说实话,除了 toscho 写的回复外,我无法测试回复。它现在似乎正在工作,但我根本没有时间彻底测试它。但是由于 Bird 为我编写这个 urlrewriting 代码遇到了很多麻烦,我会接受这个作为一个工作答案。
【解决方案2】:

如果你尝试怎么办

RewriteRule ^(myproject/.*)$ mysite.fcgi/$1 [QSA,L]

【讨论】:

  • 不,这不起作用。我不确定这到底在做什么,但是这种更改导致我收到错误消息 - 我没有进入文件夹的权限.. 不管这个文件夹是什么......
【解决方案3】:

设置 RewriteBase:

RewriteEngine On
RewriteBase /myproject/

【讨论】:

    【解决方案4】:

    在 /urls_production.py 中

    from django.conf.urls.defaults import *
    urlpatterns = patterns('', 
        (r'^myproject/', include('urls')),
    )
    

    在 /settings_production.py 中

    from settings import *
    ROOT_URLCONF = 'urls_production'
    

    确保在服务器环境中将DJANGO_SETTINGS_MODULE 设置为settings_production

    【讨论】:

    • 我快速浏览了 django-cms-2.0 多语言模块。因为,他们在 django 将响应发送到浏览器之前添加了语言环境前缀。所以,你可能想试试我的另一个答案。
    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2020-07-21
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    相关资源
    最近更新 更多