2009-06-04 64 views
11

我想在共享主機設置上安裝cakePHP。將文件解壓縮到像〜/的public_html的/ dev /蛋糕的位置,並訪問相應的URL(在這種情況下http://hostname/~username/dev/cake/)後,我收到一個404錯誤: 修復cakephp .htaccess/mod_rewrite共享主機設置


未找到

請求的URL /在此服務器上找不到usr/home/username/public_html/dev/cake/app/webroot /。


我懷疑這樣做的原因是,經仔細檢查,〜/的public_html的絕對路徑其實也不是在/ usr /首頁/用戶名/的public_html,而是在/ usr/www/users/username/

這是我一直想什麼(但顯然它不工作): (〜/的public_html的/ dev /蛋糕/應用程序/ Web根目錄/ .htaccess)是否

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase /usr/www/users/username/dev/cake/app/webroot/ 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 
</IfModule> 

不幸的是,這似乎並不改變任何東西(404消息保持不變)。思考?

+0

應該指出,這是1.3風格。對於2.x規則已經改變!現在是`index.php?/ $ 1`(沒有url =部分了),以防有人嘗試使用CakePHP的當前版本。 – mark 2013-01-03 12:26:11

回答

1

爲什麼不把文件提取到/usr/www/users/username/

+0

所以我環顧四周,我_think_這是文件實際存在的地方。 如果我正確理解Pair(我的主機),則會有一個Home(/ usr/home /用戶名)和一個Web目錄(/ usr/www/users/username),它被鏈接到/ usr/home/username/public_html (aka〜/ public_html)。 – user117643 2009-06-04 21:15:47

1

我認爲.htaccess正在讀取'〜',並且認爲你是在引用你的home文件夾(這是linux中的一個快捷方式)。

讓你的應用程序運行的最快方式是去Cake的config/core.php並禁用重寫(它告訴你取消註釋一些東西並刪除一些.htaccess文件)。另一種方法是編輯你的.htaccess,並以某種方式告訴它'〜'不是指主目錄。也許一個簡單的\將工作。

+0

禁用重寫絕對有效,謝謝。我認爲我現在就會用這種方式運行。 – user117643 2009-06-04 23:33:42

+0

這可能不是問題:我的盒子上有類似的設置(localhost /〜user/cake),它可以正常工作。 嘗試啓用重寫日誌:http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog。如果您的主機沒有禁用該指令,它可以幫助您瞭解發生了什麼問題。 – 2009-06-10 06:34:11

2

您正在修改錯誤的文件。您需要修改.htaccess文件在/ dev中發現的,你不應該修改/dev/cake/app/webroot/.htaccess一個

13

不應該

RewriteBase /usr/www/users/username/dev/cake/app/webroot/ 

RewriteBase /~username/dev/cake/ 

RewriteBase關心映射真正的URL到虛擬的,我認爲這就是你想要的。

+3

是的,RewriteBase是指邏輯/虛擬URL,而不是文件系統位置 – 2009-06-25 04:43:41

1

我在一對託管和我能夠得到的重寫規則工作,但我有問題的HTML->鏈接獲取頁面中的所有鏈接的排序參數。相同的代碼可以在我的本地機器運行窗口上正常運行,但是在對排序或查詢參數太多(編輯或更新頁面)時會導致問題。

1

是的,您必須在以下文件中提供DOCUMENT_ROOT路徑。請參考您服務器的phpinfo()以獲取正確的DOCUMENT_ROOT路徑。它應該是像var/www/html/

  1. 。htaccess的在根/目錄(外應用,蛋糕,供應商目錄)

    <IfModule mod_rewrite.c> 
        RewriteEngine on 
        RewriteRule ^$) DOCUMENT_ROOT/app/webroot/ [L] 
        RewriteRule (.*) DOCUMENT_ROOT/app/webroot/$1 [L] 
    </IfModule> 
    
  2. .htaccess中的/應用目錄

    <IfModule mod_rewrite.c> 
        RewriteEngine on 
        RewriteRule ^$ DOCUMENT_ROOT/app/webroot/ [L] 
        RewriteRule (.*) DOCUMENT_ROOT/app/webroot/$1 [L] 
    </IfModule> 
    
  3. .htaccess中的/應用內內部/ webroot目錄

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

它爲我工作。

1

我和官方的CakePHP Cockbook有'高級安裝'類似的問題。幾個小時後,我設法讓它工作。

操作系統:Mac OS X

蛋糕核心目錄:/usr/lib目錄/蛋糕
我的應用程序目錄:/用戶/ myuser的的/ dev/MYAPP
我的應用程序的webroot目錄:/用戶/爲myuser /站點/ MyApp的改性

/Users/myuser/Sites/myapp/index.php

改性 /Users/myuser/Sites/myapp/.htaccess
if (!defined('ROOT')) { 
    define('ROOT', DS.'Users'.DS.'myuser'.DS.'dev'); 
} 
if (!defined('APP_DIR')) { 
    define('APP_DIR', 'myapp'); 
} 
if (!defined('CAKE_CORE_INCLUDE_PATH')) { 
    define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'); 
} 

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

至於/Users/myuser/dev/myapp/.htaccess - 不需要在這個文件這個配置讓我刪除了它。這個配置中最棘手的部分是在Apache中啓用mod_rewrite。在Mac上編輯/private/etc/apache2/httpd.conf似乎毫無意義(針對此任務)。爲每個用戶創建額外的Apache配置文件。

修改/private/etc/apache2/users/myuser.conf

<Directory "/Users/myuser/Sites/"> 
    Options FollowSymLinks 
    AllowOverride All 
</Directory> 

默認情況下的AllowOverride設置爲無,所以mod_rewrite的將不會在這個配置下工作。

此更改後http://localhost/~myuser/myapp正常工作。

PS。 tmp目錄的快速許可修復程序。

sudo chgrp -R www /Users/myuser/dev/myapp/tmp 
sudo chmod -R g+w /Users/myuser/dev/myapp/tmp 
2

我只是想指出,我認爲模塊的加載,因爲我看到的代碼,但顯然它沒有啓用!

要啓用它在SSH(端子)輸入以下命令

sudo a2enmod rewrite 

下面的命令顯示處於活動狀態的所有模塊,如果它出現在列表中,那麼您已安裝它。

apache2ctl -M 

確保重新啓動與服務器...

service apache2 restart 

PhpCake現在應該開始工作。