2015-05-02 12 views
18

Tôi đã sử dụng các quy tắc sau trong tệp htaccess trong các ứng dụng khác để chuyển hướng người dùng từ thư mục đến tên miền phụ nhưng tải nội dung từ thư mục đó khi truy cập tên miền phụ đó.CakePHP subdomains với htaccess

# REWRITE SUBDOMAIN TO FOLDER 
RewriteCond %{HTTP_HOST} ^admin\.cameron\.com$ 
RewriteRule !^admin/? admin%{REQUEST_URI} [NC,L] 

# REWRITE FOLDER TO SUBDOMAIN 
RewriteCond %{THE_REQUEST} \s/admin/([^\s]*) [NC] 
RewriteRule^http://admin.cameron.com/%1 [R=301,L] 

Vì vậy, nếu tôi đi đến: http://cameron.com/admin tôi kết thúc trên http://admin.cameron.com/

Nhưng nội dung được tải từ http://cameron.com/admin

Tuy nhiên điều này không làm việc cho CakePHP 2.x vì viết lại nó rõ ràng ...

trong file .htaccess của tôi trong /app/webroot tôi có:

<IfModule mod_rewrite.c> 

    RewriteEngine On 

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

    # REWRITE SUBDOMAIN TO FOLDER 
    RewriteCond %{HTTP_HOST} ^admin\.cameron\.com$ 
    RewriteRule !^admin/? admin%{REQUEST_URI} [NC,L] 

    # REWRITE FOLDER TO SUBDOMAIN 
    RewriteCond %{THE_REQUEST} \s/admin/([^\s]*) [NC] 
    RewriteRule^http://admin.cameron.com/%1 [R=301,L] 

</IfModule> 

Nếu tôi truy cập: http://cameron.com/admin nó chỉ cố gắng tải AdminController và không chuyển hướng bạn, và nếu tôi đi đến: http://admin.cameron.com/ Tôi chỉ nhận được 500 lỗi máy chủ nội bộ.

Bất kỳ ý tưởng nào về cách làm việc này cho CakePHP?

+0

Nếu tôi đúng, bạn chỉ muốn thay đổi url để trỏ đến tên miền phụ? – Daniel

+0

Thử thêm câu lệnh này RewriteBase/app/webroot sau khi RewriteEngine On trong webroot của bạn .htaccess tập tin – SoftwareCarpenter

Trả lời

1

CakePHP và gần như bất kỳ khuôn khổ PHP khác phân tích cú pháp $ _SERVER [ 'REQUEST_URI'] để tuyến đường yêu cầu của bạn để điều khiển đặc biệt

biết thêm ở đây: https://github.com/cakephp/cakephp/blob/2.6/lib/Cake/Network/CakeRequest.php#L230,

vì vậy bạn chỉ cần có CÙNG yêu cầu thông số URI cho chuyển hướng của bạn để ứng dụng hoạt động.

Đối với vị trí cũ của mình đó là "/ admin", cho vị trí mới cần được như vậy, nhưng bạn không muốn vượt qua nó, vì vậy nó là tốt hơn để thay đổi nhiệm vụ như thế này:

"Khi bạn truy cập admin.site.com, bạn sẽ được chuyển hướng đến site.com/admin ".

Điều này có thể được thực hiện đơn giản như thế này:

RewriteRule ^([^.]+)\.example\.com http://example.com/$1

Nó không phải là một ví dụ làm việc cai trị bởi vì bạn cũng cần phải viết lại yêu cầu tên miền phụ của URI để để có được tất cả mọi thứ làm việc và nó phụ thuộc vào yêu cầu của bạn, nhưng có thể smth như thế này:

RewriteRule ^([^.]+)\.example\.com(.*) http://example.com/$1/$2

UPD: ví dụ thực tế

$ cat app/webroot/.htaccess 
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
    RewriteCond %{HTTP_HOST} ^admin.example.com 
    RewriteRule ^(.*)$ http://example.com/admin/$1 [P,L,NC] 
</IfModule> 
+1

Bạn có một ví dụ htaccess đầy đủ hoạt động không? Theo các quy tắc của tôi đã làm việc trước khi được sử dụng với CakePHP, đó là vấn đề. – Cameron

+1

$ cat app/webroot/.htaccess ' RewriteEngine On RewriteCond% { REQUEST_FILENAME}! -d RewriteCond% {REQUEST_FILENAME}! -f RewriteRule^index.php [L] RewriteCond% {HTTP_HOST}^admin.cake.local RewriteRule^(. *) $ http: //cake.local/admin/$1 [P, L, NC] ' – aeryaguzov

+2

Tôi đã cập nhật một câu trả lời nữa với phiên bản có thể đọc được của nhận xét trước – aeryaguzov

0
<IfModule mod_rewrite.c> 
    #standard cake htaccess stuff 
    ... 

    RewriteCond %{HTTP_HOST} ^profile\.thechatfun\.com$ [NC] 
    RewriteRule ^(.*)$ http://www.thechatfun.com/users/profile/$1 [R=301,L] 

    RewriteCond %{HTTP_HOST} ^chat\.thechatfun\.com$ [NC] 
    RewriteRule ^(.*)$ http://www.thechatfun.com/chats/index/$1 [R=301,L] 

</IfModule>