2013-01-10 34 views
0

我似乎無法同時獲得身份驗證和重寫網址。如果我禁用一個,另一個工作。這在lighttpd中可能嗎?lighttpd身份驗證和重寫相同的網址不工作

$HTTP["host"] =~ "www\.example\.com$" { 
    auth.require = (
    "/prettyurl" => 
    (
     "method" => "basic", 
     "realm" => "Password reqired", 
     "require" => "valid-user" 
    ) 
    ) 
    url.rewrite = (
     "/prettyurl" => "/index.php?foo=bar&goo=car" 
    ) 
} 

回答

2

我通常封裝auth.require一個$HTTP["url"]內。類似的東西:

$HTTP["host"] =~ "www\.example\.com$" { 
    url.rewrite = (
    "/prettyurl" => "/index.php?foo=bar&goo=car" 
) 

    $HTTP["url"] == "/index.php" { 
    $HTTP["querystring"] == "foo=bar&goo=car" { 
     auth.require = ("" => 
     (
      "method" => "basic", 
      "realm" => "Password reqired", 
      "require" => "valid-user" 
     ) 
    ) 
    } 
    } 
} 
+0

使用此代碼重寫工作,但我沒有提示輸入密碼 – user1965780

+0

嘗試從'$ HTTP [「url」] =〜「^/prettyurl」{'。另外,你能提供你的網址的真實例子嗎?也許,一旦URL被重新編譯,你必須捕獲重新編譯的url(即:'/index.php?foo=bar&goo=car'')而不是'/ prettyurl'。 – j0k

+0

刪除'^'沒有幫助。我正在使用這個確切的conf文件。唯一的區別就是域名。如果我註釋掉重寫,我會提示輸入密碼,然後得到一個404。如果我將重寫保留在index.php而不進行身份驗證。看起來好像它不允許我同時進行重寫和授權!我感謝您的幫助。 – user1965780

1

我找到了解決方案。看起來auth.require$HTTP["url"]都不會匹配url的查詢字符串部分。

首先做一個符號鏈接

ln -s index.php index_auth.php 

然後在lighttpd的CONF:

$HTTP["host"] =~ "www\.example\.com" { 
    url.rewrite = (
     "/prettyurl-auth" => "/index_auth.php?foo=bar", 
     "/prettyurl-noauth" => "/index.php?goo=car" 
    ) 
    auth.require = ("/index_auth.php" => 
     (
     "method" => "basic", 
     "realm" => "Password reqired", 
     "require" => "valid-user" 
    ) 
    ) 
} 

如果有一個尤爲明顯的方式,請讓我知道!