2010-07-15 23 views
0

我有一個我想用密碼保護的CakePHP應用程序。棘手的是,所有的文件/位置應該是唯一能夠使用密碼除了一個特定的地址(功能withing一個CakePHP的控制器)如何在Apache中配置CakePhp應用程序的密碼保護例外?

的地址就是這樣:

http://example.com/MyApp/MyController/MyFunction?MyParam=MyValue

所有其他位置應該是隻能用密碼

http://example.com/MyApp/MyController/MyOtherFunction
訪問http://example.com/MyApp/MyController/MyOtherFunction
http://example.com/MyApp/MyOtherController/MyOtherFunction

嗯,我第一次嘗試它的根.htaccess - 文件,但CakePHP的整個重寫,事情使得它非常困難,而且在.htaccess檔案沒有<LocationMatch>指令,批准。所以我嘗試了<FilesMatch>,但真正的文件總是一樣的:index.php。 mod_rewrite的重寫所有地址

http://example.com/MyApp/app/webroot/index.php?url= $ 1

在接下來的步驟我試了一下在Apache的配置,並把有這部分

<LocationMatch ^/MyApp/MyController/MyFunction.*> 
    AuthType Basic 
    AuthName "Secure Area" 
    AuthUserFile /path/to/.htpasswd 
    Require user MyUser 
</LocationMatch> 

井正則表達式匹配,但它是錯誤的方式。它保護MyFunction,但不保留其他功能。

+0

我認爲你只需要顛倒你的正則表達式模式的含義。我找不到一個簡單的方法來做到這一點,雖然它似乎意味着脫字符表示「匹配從字符串的開始」和「反轉模式」。我只是不能100%確定反轉模式的語法。 – 2010-07-15 15:55:55

回答

2

您使用的是.htpasswd嗎?你可能會更好地使用蛋糕認證,然後你可以在適當的控制器做到這一點:

function beforeFilter() { 
    $this->Auth->allow('MyFunction'); 
} 
+0

我假設OP有他們想使用htpasswd保護而不是登錄系統的原因。但是我和你在一起 - 我會把它放到應用程序邏輯中,這樣你可以更好地控制用戶會話。 – 2010-07-15 15:45:15

+0

首先,我認爲使用.htpasswd會更容易...現在我使用Cake Auth並使用allow()。謝謝 – 2010-07-16 08:58:59