2011-10-25 97 views
2

這是CakePHP的上下文,但我確定它在其他應用程序中很常見。我實現這個頁上的說明:.htaccess:多個.htaccess文件如何工作?

http://book.cakephp.org/view/917/Apache-and-mod_rewrite-and-htaccess

答:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ app/webroot/ [L] 
    RewriteRule (.*) app/webroot/$1 [L] 
</IfModule> 

B:

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^$ webroot/ [L] 
    RewriteRule (.*) webroot/$1 [L] 
</IfModule> 

C:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule> 

在第3,有3 .htaccess文件。爲了簡單起見,我們稱它們爲A,B和C.雖然它似乎在我的服務器(localhost XAMPP)上工作,但我不確定是否理解重定向的路徑。無論我輸入什麼地址,它都會按照它的設置始終進入localhost \ cake \ users \ login。

我的應用程序的根目錄所在的位置是\ cake。我有\蛋糕,\蛋糕\應用程序和蛋糕\應用程序\ webroot分別與A,B和C,在他們。按照上面的說明,cake \ app中的代碼運行,這正是我想要的。在像上面那樣正確設置.htaccess文件之前,\ cake中的代碼正在運行;這是不正確的,因爲它告訴我我的數據庫沒有設置,你沒有這個文件,等等。

有人可以幫助我和「路徑」這個應用程序正在之前運行任何PHP文件?是否將所有內容重定向到cake \ app \ webroot,然後重定向到超出.htaccess文件的位置? (在這種情況下,以cake \ users \ login)

謝謝你的幫助!

PS:我很慚愧地說,我還沒弄清楚哪個文件的哪一部分重定向到用戶登錄頁面的所有HTTP請求。我剛剛設置了這個,我剛剛回來了。我想我正在CakePHP Cookbook頁面上的第二個教程中添加一個ACL功能..

+0

簡單的跟蹤方法:爲每個重寫添加一個額外的查詢參數:'RewriteRule ...?url = $ 1&from = fileC' –

+0

Marc,是「...」應該是別的嗎? – musicliftsme

+0

是的,這是你的重寫url的其餘部分。只是因爲沒有削減粘貼整個事情而懶惰。重要的是添加'&from = fileC'查詢參數。 –

回答

1

有人可以幫助我解決這個應用程序在運行任何php文件之前所使用的「路徑」嗎?是否將所有內容重定向到cake \ app \ webroot,然後重定向到超出.htaccess文件的位置? (在這種情況下,以cake \ users \ login)

總之,是的。只有一個.htaccess文件在做real工作,那就是「C」(這是/app/webroot/.htaccess的文件)。這將任何不是針對現有文件或目錄的請求傳遞到引導CakePHP並處理請求的index.php。任何進一步的「重定向」由CakePHP's routing處理。

編輯: 解決您在什麼重定向到登錄頁面的問題,機會是你已經配置了Auth component,並沒有通過$this->Auth->allow()設置任何「公共」的網頁。


另外兩個是存在的情況下,你把CakePHP安裝目錄或應用程序目錄到文件夾中所使用的Apache服務的網頁,例如/var/www/html或類似的。你會注意到,該結構是:

/cakephp-1.3.x/.htaccess ( 「A」)

/cakephp-1.3.x/app/.htaccess (「B 「)

/cakephp-1.3.x/app/webroot/.htaccess (」 C「)

所以,在任何這些水平將最終的任何請求由所述再處理writeRule在「C」中。這樣做是爲了保護敏感數據,例如您的數據庫連接信息,並確保應用程序正常運行(因爲所有請求都應該通過CakePHP引導程序,除非您已設置自定義路由)。

+0

非常感謝賈斯汀!你是對的。我在cake \ app \ app_controller.php中找到Auth組件,並且BeforeFilter與登錄頁面一起工作。我讚賞清楚的解釋。這聽起來很合理。 – musicliftsme

1

以下行將所有內容重定向到您的索引頁面,這是一個Cake構造。

RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

就你而言,我認爲你的重定向不是直接導致你的.htaccess文件。您的webroot htaccess只需將所有內容都管理到您的索引頁面。

但是,您應該考慮檢查您的索引頁。該頁面的控制器可能具有傳入參數的默認子句。因此,如果您輸入一個未知參數的網址,您的索引頁面將只顯示一個登錄屏幕。

這是我的兩美分。但是,我只和CakePHP一起做過實驗,所以如果我錯了,那麼有更多經驗的人應該隨時糾正我。

+0

感謝您輸入lunchmeat317。當我沒有像上面這樣的htaccess安裝程序時,我去了localhost/cake,它正在從沒有配置文件設置的\ cake目錄中讀取文件。例如當cake \ app \ database.php中正確的一個出現時,它看上去像是cake \ database.php。我發現cake \ app \ webroot \ index.php文件是每個請求都被重定向到當前的A,B和C設置。 – musicliftsme

+0

嗯,我會更多的關注這個index.php文件。我不認爲我已經修改了它(從下載中使用它)。 – musicliftsme

1

我認爲這是由於在你的應用程序中使用了Auth組件而發生的。你寫到你正在嘗試使用Auth組件的CakePHP的Acl組件部分。在請求控制器中包含Auth組件的情況下,如果沒有指定其他腰部方法,cakephp會默認重定向到/ users/login。所以我猜htaccess不會在這裏造成問題。

+0

你是對的Auth組件!謝謝! – musicliftsme