2016-07-29 28 views
1

如何在不包含擴展名的情況下訪問yaws文件?再說了,如何在Yaws/Erlang中重寫URL

www.domain.com/listen.yaws =>www.domain.com/listen

我無法找到yaws文檔/ appmod這方面的任何具體文件。

我認爲這個問題最終得到了澄清!

回答

4

您可以在the Yaws PDF documentation的「Arg Rewrite」部分(7.1.2)中找到如何完成此操作的一個示例。設置在服務器配置中的變量arg_rewrite_mod到一個Erlang模塊,支持改寫名稱:

arg_rewrite_mod = my_rewriter 

爲了支持重寫,該my_rewriter模塊必須定義和導出arg_rewrite/1功能,服用#arg{}記錄作爲它的參數:

-module(my_rewriter). 
-export([arg_rewrite/1]). 

-include_lib("yaws/include/yaws_api.hrl"). 

rewrite_pages() -> 
    ["/listen"]. 

arg_rewrite(Arg) -> 
    Req = Arg#arg.req, 
    {abs_path, Path} = Req#http_request.path, 
    case lists:member(Path, rewrite_pages()) of 
     true -> 
      Arg#arg{req = Req#http_request{path = {abs_path, Path++".yaws"}}}; 
     false -> 
      Arg 
    end. 

該代碼包含yaws_api.hrl來獲取#arg{}記錄定義。

rewrite_pages/0函數返回必須重寫的頁面列表,包含".yaws"後綴;在這個例子中,它只是您在問題中提到的/listen頁面。如果在arg_rewrite/1我們在該列表中找到請求的頁面,我們在頁面名稱上附加".yaws",並將其包含在新的#arg{}中,然後我們返回到Yaws,然後Yaws根據新的#arg{}繼續分派請求。