django - lighttpd mod_rewrite 与 Django 和 FastCGI 的 apache mod_rewrite

标签 django mod-rewrite fastcgi lighttpd

我正在从 Apache 中的 Django FastCgi 设置迁移到 lighttpd 中的设置。

在 Apache 上,我使用 Django 文档中描述的 fcgi 配置。核心部分是将我所有的非静态 URL 重写为/mysite.fcgi/$1:

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

然后将/mysite.fcgi 的所有请求转发给 FastCGI:

<IfModule mod_fastcgi.c>
    FastCGIExternalServer /opt/www/mysite.fcgi -host 127.0.0.1:8000
</IfModule>

该设置适用于 Django。例如,如果我访问 http://www.mydomain.com/help/ 并在模板中打印 {{ request.get_full_path }},结果是 /help/ 。生活很美好,我很快乐。然而,我遇到了一些问题,迫使我转向支持比 Apache 所能提供的更多同时连接数的 Web 服务器。

快进到 lighttpd。一切都配置好了。我正在使用 mod_rewrite 重写我的 URL:

url.rewrite-once = ( "^(/media/.)$"=> "$1", "^/favicon.ico$"=> "/med/img/favicon/favicon.ico", "^(/.)$"=> "/mysite.fcgi$1", )

并且具有 FastCGI 处理/mysite.fcgi:

   fastcgi.server = (
       "/mysite.fcgi" => (
           "main" => (
               "host" => "127.0.0.1",
               "port" => 8000,
               "check-local" => "disable",
           )
       ),
   )

一切正常,我的 Django 网站运行良好。但是当我访问 http://www.mydomain.com/help/ 并在模板中打印 {{ request.get_full_path }} 时,结果是 /mysite.fcgi/help/ 。这会导致一些问题。

虽然这通常不会导致问题,因为 Django 站点运行良好,但当我使用 SSL 时,它确实会导致问题。具体来说,我使用 http://www.djangosnippets.org/snippets/240/ 中的“Stephen Zabel - sjzabel@gmail.com”中的 sslmiddleware。 。该软件依赖于request.get_full_path,它在lighttpd 下返回的值与在Apache 下返回的值不同。 request.path 也是如此。

谁能提出解决这个问题的方法吗?理想情况下,我希望 lighttpd mod_rewrite 具有与 Apache 下的 mod_rewrite 相同的行为。如果不可能,我想要一个 lighttpd FastCGI Django 设置,它与我正在使用的 sslmiddleware 包兼容。或者,我可以更改 sslmiddleware 包,使其与 lighttpd 中的 mod_rewrite 重写 URL 的方式兼容。

这个答案将是一份很棒的 30 岁生日礼物!

最佳答案

您是否尝试将 settings.py 中的 FORCE_SCRIPT_NAME 定义为“”并重新启动fastcgi服务器?

FORCE_SCRIPT_NAME=""

关于django - lighttpd mod_rewrite 与 Django 和 FastCGI 的 apache mod_rewrite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1107458/

相关文章:

php - OPcache 不缓存任何东西

django:如何将 css 传递给 form.as_ul

django - Heroku Django celery : NameError: name 'DATABASES' is not defined

php - 是否可以在没有 htaccess 文件的情况下重写 URL?

php - htaccess 重定向因多个 URL 参数而失败

perl - 自动重启关闭的 FastCGI 进程的好策略是什么?

nginx 与 mod_wsgi

python - 在 django 项目设置中使用变量作为字典键

python - django 中项目主管的路径

.htaccess - 通用 htaccess 将 www 重定向到非 www