2012-08-22 51 views
6

Tôi phải chạy ứng dụng CakePHP 2.1 của mình trong môi trường với CGI-PHP và không có khả năng khai báo bí danh apache. Tôi muốn chuyển hướng các yêu cầu đến một tên miền phụ tới CakePHP bằng mod_rewrite, nhưng điều này không hiệu quả.CakePHP, CGI và mod_rewrite

thiết lập hiện tại

  • Webroot là ~/user/public_html
  • CakePHP là trong ~/user/public_html/cakephp/
  • CakePHP nên được yêu cầu tại dev.mydomain.tld

Những gì tôi có cho đến nay là thế này (tất cả các đường dẫn tương đối vào webroot):

  • ~/user/public_html/.htaccess

    RewriteEngine on 
    Options +FollowSymlinks 
    RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC] 
    RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC] 
    RewriteCond %{REQUEST_URI} !/$ 
    RewriteCond %{DOCUMENT_ROOT}/cakephp/app/webroot%{REQUEST_URI}/ -d 
    RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R,L] 
    RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC] 
    RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC] 
    RewriteRule ^(.*)$ /cakephp/app/webroot/$1 [L] 
    
  • ~/user/public_html/cakephp/app/webroot/.htaccess

    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule ^(.*)$ index.php [QSA,L] 
    

Vấn đề

Yêu cầu được bằng cách nào đó không được định tuyến một cách chính xác (ứng dụng chạy không có vấn đề trong môi trường phát triển của tôi với PHP như một mô-đun và Máy chủ ảo ở cấp độ /cakephp/app/webroot/). Khi tôi yêu cầu trang chủ tại dev.mydomain.tld Tôi chỉ nhận được một Error, Cake nói với tôi rằng CakephpController bị thiếu.

thông tin gỡ lỗi

  • những phần thú vị của $_SERVER sửa lỗi như dòng đầu tiên trong /cakephp/app/webroot/index.php

    [REDIRECT_REDIRECT_REDIRECT_STATUS] => 200 
        [REDIRECT_REDIRECT_STATUS] => 200 
        [REDIRECT_HANDLER] => php-script 
        [REDIRECT_STATUS] => On 
        [HTTP_HOST] => dev.mydomain.tld 
        [HTTP_CONNECTION] => keep-alive 
        [SERVER_SOFTWARE] => Apache/2.2.21 (Unix) 
        [SERVER_NAME] => dev.mydomain.tld 
        [SERVER_ADDR] => 192.0.43.10 
        [SERVER_PORT] => 80 
        [DOCUMENT_ROOT] => /home/user/public_html 
        [SCRIPT_FILENAME] => /home/user/public_html/cakephp/app/webroot/index.php 
        [REDIRECT_URL] => /cakephp/app/webroot/index.php 
        [GATEWAY_INTERFACE] => CGI/1.1 
        [SERVER_PROTOCOL] => HTTP/1.1 
        [REQUEST_METHOD] => GET 
        [QUERY_STRING] => 
        [REQUEST_URI] =>/
        [SCRIPT_NAME] => /cakephp/app/webroot/index.php 
        [_PHP5_WORK_DIR] => /home/user/public_html/cakephp/app/webroot 
        [PHP_SELF] =>/
        [ORIG_PATH_INFO] => 
        [ORIG_PATH_TRANSLATED] => /home/user/public_html/cakephp/app/webroot/index.php 
        [PATH_INFO] => /cakephp/app/webroot/index.php 
    
  • những phần thú vị của đối tượng CakeRequest truyền cho các điều phối:

    url => 'cakephp/app/webroot/index.php' 
        base => '/cakephp' 
        webroot => '/app/webroot/' 
        here => '/cakephp/cakephp/app/webroot/index.php' 
    

Câu hỏi

Vì vậy, những gì tôi không nhận được ở đây, là lý do tại sao các đối tượng CakeRequest có tham chiếu đến các cấu trúc thư mục của tôi trong khi $_SERVER['REQUEST_URI'] == '/'. Tôi phải làm gì, để có được quyền này? Và ngay từ đầu, tôi nên tìm vấn đề ở đâu trong chỉ thị mod_rewrite hoặc trong CakePHP? Tôi đã thử một số thứ, bao gồm thiết lập RewriteBase trong các tệp .htaccess và các cài đặt khác nhau cho App.baseUrl trong đối tượng Cấu hình, nhưng dường như không có gì để trợ giúp ở đây.

Tôi thực sự biết ơn nếu ai đó có thể cho tôi một con trỏ về cách giải quyết vấn đề này.

Trả lời

2

Tôi sẽ thực sự biết ơn nếu ai đó có thể cho tôi một con trỏ về cách giải quyết vấn đề này.

Sau đó, tôi sẽ cung cấp cho bạn một con trỏ vì tôi không biết câu trả lời. :)

Bạn đã đọc this question nơi tôi gặp sự cố khá giống với của bạn?

+0

Cảm ơn con trỏ! Tôi đã không đọc nó trước đây, nhưng bạn nói đúng, nó trông khá giống nhau. Thật đáng tiếc là giải pháp được đề xuất cũng không giúp ích gì cho trường hợp của tôi. Tôi có thể sẽ liên kết 'ứng dụng/webroot' của tôi với webroot khó khăn để giải quyết vấn đề này, điều này chắc chắn sẽ chỉ chuyển vấn đề cho tương lai. Tôi vẫn sẽ thực sự quan tâm đến việc giải quyết điều này, thậm chí nhiều hơn sau khi nhìn thấy bạn có cùng một vấn đề. Tái bút: Không có WAMP nào tham gia ở đây. – bfncs

+0

Bạn cũng có thể đọc điều này, đặc biệt là các nhận xét, đó là cách tôi giải quyết vấn đề của mình: http://bakery.cakephp.org/articles/BBBThunda/2010/02/25/troubleshooting-cakephp-installation-issues-related-to- apache-2-mod_rewrite-cho-người mới bắt đầu –

+0

ALS, cuối cùng tôi đã chọn bạn trả lời bởi vì nó đến gần nhất với những gì tôi cần và tôi không muốn lãng phí các điểm. Nó khá chắc chắn, rằng có một số cấu hình sai máy chủ lạ của hoster liên quan và họ đang làm việc trên sửa chữa nó. Quá lâu, tôi sẽ ghi đè lên các giá trị trong '$ _SERVER' với các giá trị mặc định hợp lý. Đó là thực sự, thực sự xấu xí, nhưng nó hoạt động như một giải pháp cho đến khi cấu hình máy chủ đã được cố định. – bfncs

1

/~ url Tên truy nhập được tạo ra với mod_userdir, mod_rewrite tuy nhiên dải ~ chars

Vì vậy, sử dụng file .htaccess bánh mặc định, và thêm:

RewriteBase /~username/path/to/cake 

để tất cả các file htaccess tham gia

+0

tôi không nhận định ~/filepath tên người dùng cho/~ tên người dùng url xin vui lòng bỏ qua câu trả lời này – Ceeram

+0

Điều này không giúp đỡ, nhưng dù sao, cảm ơn rất nhiều sự giúp đỡ của bạn! – bfncs

1

Cách truyền thống sẽ chuyển hướng các yêu cầu đến ứng dụng CakePHP đến mức /cakephp/app/.

Thực tế là nó muốn giải thích cakephp làm tên bộ điều khiển là một giveaway rằng đây là vấn đề.

Sự cố của bạn có thể liên quan đến ALS nhưng không chính xác như nhau. Những gì bạn thực sự muốn vì bạn có ý định cho ứng dụng CakePHP của bạn xuất hiện cư trú tại thư mục gốc của máy chủ khi nó thực sự không là:

RewriteBase/

Vấn đề tiềm năng khác là môi trường dev của bạn không bao giờ được tiếp xúc với bất kỳ tác dụng phụ tiềm ẩn liên quan đến tệp .htaccess dưới /cakephp/app.

gì tôi sẽ cố gắng là lần đầu tiên thêm RewriteBase tương đối so với thư mục/cakephp

  1. Trong ứng dụng/.htaccess: /
  2. Trong app/webroot/.htaccess: /webroot/