2012-03-16 52 views
5

Tôi đã xem xét một số ví dụ về cấu hình htaccess cho các trang web trong các thư mục con và cố gắng hầu hết chúng không có thành công 100%..htaccess cho trang web trong thư mục con bằng cách sử dụng khung công tác Yii

Thiết lập của tôi là:

  • sử dụng framework Yii
  • htaccess tại public_html/.htaccess
  • trang web nằm bên public_html/mysite thư mục
  • index xử lý tất cả các yêu cầu đặt tại public_html/mysite/frontend/www/index.php

Các tình trạng của các URL:

  • www.mysite.com hoạt động tốt [ok]
  • www.mysite.com/controller/action chỉ cho tôi trang chủ [sai]
  • www.mysite.com/mysite/frontend/www/controller/action hoạt động tốt [sai, mục trên nên việc thay ]

My .htaccess vào lúc này trông như thế này:

AddHandler application/x-httpd-php53s .php .html 

Options +SymLinksIfOwnerMatch 
IndexIgnore */* 

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

RewriteCond %{HTTP_HOST} ^(www.)?mysite.com$ 
RewriteCond %{REQUEST_URI} !^/mysite/frontend/www 

RewriteRule ^(.*)?$ /mysite/frontend/www/index.php [L] 

Tôi đã thử tất cả mọi thứ, nhưng tôi không có ý tưởng tại sao www.mysite.com/controller/action sẽ không hoạt động :(

Bất kỳ sự giúp đỡ sẽ được thực sự đánh giá cao! Cảm ơn!

+0

Bạn có thể cần YII cho biết vị trí gốc và vị trí cơ sở đại diện cho nó, nhưng tôi không có chuyên gia YII. – hakre

+0

Bạn đã thử thêm 'RewriteLog' và' RewriteLogLevel' để xem điều gì đang xảy ra? http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog –

+0

@hakre, ứng dụng Yii basePath (nếu đó là ý của bạn) được đặt thành 'Yii :: getPathOfAlias ​​('site.frontend') ', có nghĩa là public_html/mysite/frontend /. Tôi cũng đã thử thêm RewriteBase vào '/ mysite' và'/mysite/frontend/www', nhưng không có gì thay đổi. – guivalerio

Trả lời

0

Bạn không đề cập đến nếu bạn đã định cấu hình Trình quản lý url của Yii cho các URL sạch. Bạn cần, nếu không thì Yii hy vọng "tuyến đường" xuất hiện dưới dạng tham số GET có tên "r". Nếu không, hãy tham khảo this section of the definitive guide

+0

Có, tôi đang sử dụng URL sạch. 'urlFormat '=>' path'' và' 'showScriptName' => false'. Vì vậy, tất cả mọi thứ sẽ ok về phía đó. – guivalerio

4

Tôi đã tìm thấy câu trả lời cho this similar question là hữu ích. Sau đây là cách các quy tắc viết lại của tôi đã kết thúc:

#Forward all non-existent files/directories to Yii 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*) subdir/index.php/$1 [QSA,L] 

Điều này có tất cả các tệp/thư mục không tồn tại và gửi chúng đến tập lệnh yii có nối thêm url ban đầu. QSA nối thêm bất kỳ chuỗi truy vấn nào có thể có trong url ban đầu.

+0

Điều này hoạt động tốt trên môi trường địa phương của tôi, nhưng vì một số lý do không hoạt động với Hostgator. – gradosevic

0

Bạn không cần chỉnh sửa .htaccess. Bạn chỉ cần di chuyển tập lệnh nhập cảnh Yii (index.php) và mặc định .htaccess từ thư mục con lên webroot (để chúng nằm ngay dưới tệp public_html). Khi bạn di chuyển index.php và .htaccess vào thư mục gốc, tất cả các yêu cầu web sẽ được định tuyến trực tiếp tới index.php (thay vì đến thư mục con), do đó loại bỏ phần/thư mục con của url.

Sau khi bạn di chuyển các tệp, bạn sẽ cần chỉnh sửa index.php để cập nhật các tham chiếu đến tệp yii.php (trong thư mục khung Yii) cũng như tệp cấu hình Yii (main.php). Cuối cùng, bạn sẽ cần phải di chuyển thư mục asset trực tiếp đến webroot, vì theo mặc định, Yii hy vọng thư mục asset được đặt ở cùng vị trí với kịch bản lệnh).

Đó nên là tất cả các bạn cần phải làm, nhưng nếu bạn cần biết thêm chi tiết, tôi mô tả cách tiếp cận đầy đủ ở đây:

http://muhammadatt.tumblr.com/post/83149364519/modifying-a-yii-application-to-run-from-a-subdirectory

0

Tôi cũng không cập nhật các tập tin .htaccess, dễ dàng hơn để thay đổi httpd.conf máy chủ ảo cho tên miền phụ và thay đổi DocumentRoot để trỏ đến thư mục yii của bạn.

Các vấn đề liên quan