在本地部署 webpy.org

web.py 是一个轻量级的 Python Web 框架(类似与 django ,只不过 django 是重量级的),webpy.org 整个网站都在 github 上。我想把它下下来,在本地部署一下,遇到一些问题,可能有人觉得这些问题很简单,不过我还是搞了半天才搞定的,记录一下吧。

首先下载:

git clone git://github.com/webpy/webpy.github.com.git

然后:

cd webpy.github.com
jekyll --server 8080

访问首页正常,但是访问 install 页面时,提示 Not Found ,页面请求的 URL 是: http://localhost:8080/install ,而实际的文件是 install.html 。文件有后缀名,而 URL 里没有,可是在 github 上,或者说是 webpy 的主页上,是正常的,URL 里也没有后缀,但可以看到页面,怎么回事呢?

通过搜索,我了解到 Apache 有一个选项叫做 MultiViews 可以智能的选择资源的后缀名,我决定尝试一下。

首先:

mkdir /mnt/webpy.org
jekyll /mnt/webpy.org

然后修改 Apache 的配置文件:

Alias / /mnt/webpy.org/
<Directory "/mnt/webpy.org/">
    Options MultiViews
</Directory>

访问首页正常,访问 http://localhost/install 时,是有页面出来,不过出来的是 install.es.html ,怎么回事呢?是不是 MultiViews 在智能选择的时候,选择了 es 这种语言,可是为什么呢?我用 FireBug 查看请求头,请求头里有:

Accept-Language	en-us,en;q=0.5

指定的语言是 en-us 或者 en 啊,没 es 什么事!然后我查看文件发现里面没有 install.en.html 只有 install.html 和一些其他语言的文件比如: install.es.html ,修改配置:

Alias / /mnt/webpy.org/
<Directory "/mnt/webpy.org/">
    Options MultiViews
    DefaultLanguage en 
</Directory>

恩,很好,正常了,不错不错。在 install 页面上有一个 chinese 简体中文 的链接,点上去,我晕,出现一个 Not Acceptable 的错误,此时的 URL 是 http://localhost/install.zh-cn ,然后目录里确实有 install.zh-cn.html 这个文件,通过查看 Apache mod_negotiation 的文档,以及自己一通乱试,发现只要将配置文件改成如下这样就行了(访问其他语言的话,还需要在 LanguagePriority 中增加设置)。

Alias / /mnt/webpy.org/
<Directory "/mnt/webpy.org/">
    Options MultiViews
    DefaultLanguage en 
    LanguagePriority en zh-cn
</Directory>

P.S. 2013-03-05

这个其实也可以用 mod_rewrite 来实现:

DocumentRoot /mnt/webpy.org/
RewriteEngine on
RewriteLog ${APACHE_LOG_DIR}/rewrite.log
RewriteLogLevel 3 

RewriteCond %{LA-U:REQUEST_FILENAME}.html -f
RewriteRule (.*) $1.html [L]

PS: 有个小问题让我纠结了半天,debian testing 安装的 apache 已经默认帮我配置好了一个 VirturlHost ,我一开始没有注意,只是在 apache2.conf 里修改配置,怎么都不生效,后来把那个 VirturlHost 注掉就好了。

blog comments powered by Disqus