我正在从 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/