【问题标题】:How to configure the webserver to server a particular page as the default page?如何配置网络服务器以将特定页面作为默认页面提供服务?
【发布时间】:2011-01-28 07:15:25
【问题描述】:

我正在使用 Lighttpd 和 Django。我已将我的 Lighttpd 服务器配置为将所有以“.psp”扩展名结尾的请求传递给 Django。

我的启动页面是通过 Django 提供的页面,访问方式为“http://192.168.1.198/home.psp”。我想让用户浏览此页面而不在 url 中明确写入“home.psp”,即使用“http://192.168.1.198”

这可能吗?

提前感谢您的帮助。

【问题讨论】:

  • 您可以将/ 重定向到/home.psp。或将/ 代理为/home.psp(更难),或将django 更改为从/ 提供根页面并强制lighttpd 通过将^$.*\.psp 转发到您的.psp 规则来例外django。只是在我睡觉前的一些想法。 GL!
  • 为什么首先将服务器配置为以.psp 提供Django 页面? Django 不是 PSP,不需要任何特定的扩展。
  • 这个问题很有道理,但是您介意发布您现在的 Lighttpd 配置吗?

标签: python django lighttpd


【解决方案1】:

我认为您在这里混淆了概念,即让单个文件表示网页的“旧”方法本身包含的代码在发送给解释器之前传递给解释器,以响应 django/frameworks 的工作原理。

如果您熟悉 apache,可以将 django 想象成部分承担 mod_rewrite 的角色。 Django 和其他框架具有所谓的调度程序或路由机制。

基本上,他们订阅了 MVC 模式,即您应该分离出模型、控制器和视图(用 django 的说法,即模型、模板和视图)。

然后发生的事情是,您在 django 中有一个名为 urls.py 的文件,其中包含处理它们的路由(url)和方法名称(通常包含在 views.py 中)的列表。这是一个例子:

urlpatterns = patterns('',
    url(r'^dologin$',       'testapp.views.auth_login',         name="auth-login-uri"),
    url(r'^doopenidlogin$', 'testapp.views.auth_openid_login',  name="auth-openid-login-uri"),
    url(r'^dologout$',      'testapp.views.auth_logout',        name="auth-logout-uri"),
    url(r'^login$',         'testapp.views.loginform',          name="login-form"),
    url(r'^openidlogin$',   'testapp.views.openidloginform',    name="openid-login-form"),
    url(r'^$',              'testapp.views.index',              name="index"),
)

这里testapp是一个python包,views.py是一个python文件,index是一个django视图。 url 是从 regex 构造的,所以我可以有任何我想要的 url,stackoverflow url 是如何形成的。

所以基本上,您再也不需要文件扩展名了。我强烈建议你买一本关于 django 的好书——周围有一些。

【讨论】:

  • 实际上,我们需要配置 lighttpd 来服务 Django 视图,对吧?我认为我们需要告诉 lighttpd 这个页面应该通过 django 和其他静态通过 Web 服务器本身提供,而不将请求传递给 Django?所以我使用扩展来让 lighttpd 识别哪些请求传递给 Django。我做错了什么吗?
  • @mahendraliya 该解决方案很好,但并不常见,可能有更优雅的方式来处理它。例如,您可以将所有以/media/ 开头的请求设置为使用您的静态目录作为文档根目录并直接提供文件。您可以对虚拟主机 (media.mysite.com) 执行相同的操作。然后,所有对主域或没有/media/ 的请求都将传递给 Django。这消除了对扩展的任何需求,并使您的 URLConf 更整洁。
【解决方案2】:

您可能正在寻找 Lighty 配置文件中的 index-file.names 指令。只需将“home.psp”添加到配置文件的列表中,Lighty 会在未指定文件名时查找它。

【讨论】:

    【解决方案3】:

    我自己解决了这个问题。这是我所做的:

    我必须在 lighttpd 的配置文件的 url.rewrite-once 块中添加一条语句,例如:

     url.rewrite-once = (
            "^(/media.*)$" => "$1",
            "^(/static.*)$" => "$1",
            "^/favicon\.ico$" => "/media/favicon.ico",
            "^(/)$" => "/my_project_dir/home.psp",
            "^(/.*)$" => "/my_project_dir$1",
       )
    

    除此之外,我在 urls.py 中添加了以下行:

    (r'^$',my_index_view_name),
    

    希望这对将来的某人有所帮助。谢谢大家楼上的回复。干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 2010-11-10
      • 2015-11-04
      • 2011-07-15
      • 2014-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多