2009-06-04 9 views
11

Tôi đang cố gắng cài đặt cakePHP trên một thiết lập lưu trữ được chia sẻ. Sau khi giải nén các tập tin đến một vị trí như ~/public_html/dev/bánh và quý khách đến thăm URL thích hợp (trong trường hợp này http://hostname/~username/dev/cake/), tôi nhận được một lỗi 404: sửa chữa cakephp .htaccess/mod_rewrite cho các thiết lập lưu trữ được chia sẻ


Not Found

URL được yêu cầu/usr/home/username/public_html/dev/bánh/app/webroot/không tìm thấy trên máy chủ này.


tôi nghi ngờ rằng lý do cho điều này là khi xem xét kỹ, các đường dẫn tuyệt đối đến ~/public_html không có trong thực tế /usr/home/username/public_html, nhưng thay vì /usr/www/users/username/.

Dưới đây là những gì tôi đã cố gắng (nhưng rõ ràng nó không làm việc): (~/public_html/dev/bánh/app/webroot/.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> 

Thật không may, điều này dường như không để thay đổi bất cứ điều gì (thông báo 404 vẫn giữ nguyên). Suy nghĩ?

+0

Cần lưu ý rằng đây là kiểu 1,3. Đối với 2.x Quy tắc đã thay đổi! Nó bây giờ là 'index.php?/$ 1' (không có url = phần nữa) trong trường hợp ai đó đang cố gắng sử dụng nó ngay bây giờ với các phiên bản hiện tại của CakePHP. – mark

Trả lời

1

Tại sao không chỉ trích xuất các tệp thành /usr/www/users/username/?

+0

Vì vậy, tôi nhìn xung quanh và tôi _think_ đó là nơi các tập tin thực sự cư trú. Nếu tôi hiểu Pair (máy chủ của tôi) chính xác, có Trang chủ (/ usr/home/username) và một thư mục Web (/ usr/www/users/username), được liên kết với/usr/home/username/public_html (aka ~/public_html). – user117643

1

tôi nghĩ rằng .htaccess đang đọc '~' và nghĩ rằng bạn đang đề cập đến thư mục chính của bạn (đó là một cái gì đó của một phím tắt trong Linux).

Cách nhanh nhất để chạy ứng dụng của bạn là truy cập vào config/core.php của bánh và tắt sử dụng ghi đè (nó yêu cầu bạn bỏ ghi chú và xóa một số tệp .htaccess). cách khác là chỉnh sửa .htaccess của bạn và bằng cách nào đó nói rằng '~' không đề cập đến thư mục chính. có thể đơn giản \ sẽ hoạt động.

+0

Tắt tính năng ghi đè chắc chắn hoạt động, cảm ơn. Tôi nghĩ rằng tôi sẽ chỉ chạy với điều đó ngay bây giờ. – user117643

+0

Đó có thể không phải là vấn đề: Tôi có một thiết lập tương tự trên hộp của tôi (localhost/~ user/cake) và nó hoạt động ổn. Thử bật nhật ký ghi lại: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog. Nếu máy chủ lưu trữ của bạn không tắt chỉ thị, máy chủ có thể giúp bạn xem có gì sai. –

2

Bạn đang sửa đổi tệp sai. Các tập tin .htaccess bạn cần phải sửa đổi được tìm thấy trong/dev, bạn không nên sửa đổi một trong /dev/cake/app/webroot/.htaccess

13

nên không

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

được

RewriteBase /~username/dev/cake/ 

RewriteBase quan tâm đến việc ánh xạ các url thực đến các url ảo và tôi nghĩ đó là những gì bạn muốn.

+3

Có, RewriteBase đề cập đến URL hợp lý/ảo, không đến vị trí hệ thống tập tin –

+0

mà bạn đã kết thúc nhiệm vụ giải quyết vấn đề .htaccess này, cảm ơn. –

1

Tôi đang lưu trữ trên cặp và tôi có thể nhận các quy tắc viết lại để hoạt động nhưng tôi gặp sự cố với liên kết HTML-> nhận các tham số sắp xếp cho tất cả các liên kết trong các trang. Cùng một mã chạy tốt trên cửa sổ máy chạy cục bộ của tôi nhưng trên phân loại cặp hoặc quá nhiều tham số truy vấn (Chỉnh sửa hoặc Cập nhật trang) gây ra sự cố.

1

Có, bạn phải cung cấp đường dẫn DOCUMENT_ROOT trong các tệp sau. Vui lòng tham khảo phpinfo() của máy chủ của bạn để nhận đường dẫn DOCUMENT_ROOT chính xác. Nó phải là một cái gì đó như var/www/html/.

  1. .htaccess trong thư mục gốc / thư mục (Bên ngoài các ứng dụng, bánh, các nhà cung cấp danh bạ)

    <IfModule mod_rewrite.c> 
        RewriteEngine on 
        RewriteRule ^$) DOCUMENT_ROOT/app/webroot/ [L] 
        RewriteRule (.*) DOCUMENT_ROOT/app/webroot/$1 [L] 
    </IfModule> 
    
  2. .htaccess trong thư mục /app

    <IfModule mod_rewrite.c> 
        RewriteEngine on 
        RewriteRule ^$ DOCUMENT_ROOT/app/webroot/ [L] 
        RewriteRule (.*) DOCUMENT_ROOT/app/webroot/$1 [L] 
    </IfModule> 
    
  3. .htaccess bên trong /app/webroot thư mục

    <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> 
    

Nó làm việc cho tôi.

+0

làm thế nào để tìm tht trong godaddy? –

1

Tôi đã gặp sự cố tương tự với 'cài đặt nâng cao' từ Sách chính thức CakePHP Cockbook. Sau vài giờ, tôi đã cố gắng làm cho nó hoạt động.

Hệ điều hành: Mac OS X

thư lõi

Cake: /usr/lib/bánh
My thư mục ứng dụng ứng dụng: /Users/myuser/dev/myapp
My thư mục ứng dụng webroot: /Users/myuser/Sites/myapp

Sửa đổi /Users/myuser/Sites/myapp/index.php

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'); 
} 

Sửa đổi /Users/myuser/Sites/myapp/.htaccess

<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> 

Đối với /Users/myuser/dev/myapp/.htaccess - file này là không cần thiết trong cấu hình này vì vậy tôi đã xóa nó. Phần khó khăn nhất với cấu hình này là cho phép mod_rewrite trong Apache. Khi chỉnh sửa trên máy Mac /private/etc/apache2/httpd.conf dường như là vô nghĩa (đối với tác vụ này). Tệp cấu hình Apache bổ sung được tạo cho mỗi người dùng.

Sửa đổi /private/etc/apache2/users/myuser.conf

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

Theo mặc định AllowOverride được thiết lập để Không, vì vậy mod_rewrite sẽ không hoạt động trong cấu hình này.

Sau khi thay đổi này http://localhost/~myuser/myapp hoạt động bình thường.

PS. Sửa lỗi cấp quyền nhanh cho thư mục tmp.

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

Tôi chỉ muốn chỉ ra rằng tôi đã nghĩ rằng mô-đun đã được tải vì tôi thấy mã nhưng dường như nó chưa được kích hoạt!

Để kích hoạt nó trong SSH (terminal) gõ lệnh sau

sudo a2enmod rewrite 

Lệnh dưới đây cho thấy tất cả các module đang hoạt động, nếu nó xuất hiện trong danh sách thì bạn đã cài đặt nó.

apache2ctl -M 

Hãy chắc chắn để khởi động lại máy chủ với ...

service apache2 restart 

PhpCake nên bắt đầu làm việc ngay bây giờ.