2015-01-25 18 views
6

Tôi đang cố gắng thực hiện bất kỳ hoặc tập hợp các tên miền phụ nào chuyển hướng đến thư mục trong thư mục "bộ điều khiển" của cài đặt CI. Tôi đã thử một loạt các công cụ tìm thấy ở đây trên SO nhưng không ai làm việc cho dự án của tôi hoặc có thông số kỹ thuật tương tự tôi cần. Vì tôi là một chút noob khi nói đến .htaccess vì vậy tôi đã figured tôi chỉ có thể yêu cầu một người nào đó đủ điều kiện ở đây. Sau đây là các thông số kỹ thuật:CodeIgniter - chuyển hướng tên miền phụ được đặt thành thư mục trong "bộ điều khiển"

  • sử dụng this awesome .htaccess file làm căn cứ
  • cần phải chuyển hướng ít nhất này ba tên miền phụ (www | admin | api) đến/application/controllers/(www | admin | api) thư mục tương đương
  • mà không mất các REQUEST_URI (chỉ nói)
  • và không thực sự thay đổi URL trong thanh địa chỉ

Ví dụ: http: // api .domain.com/số/uri/phân đoạn nội bộ nên chuyển hướng đến CI_installation_folder/application/controllers/api/some/uri/phân đoạn

Tôi đã thử một cái gì đó như thế này (và các biến thể):

RewriteCond %{HTTP_HOST} ^(www|admin|api) [NC] 
RewriteRule ^(.*)$ /%1/$1 [L,R=301] 

hoặc thay thế các RewriteRule với 2 dòng khác như vậy:

RewriteCond %{ENV:REDIRECTED} !true 
RewriteRule ^(.*)$ [L,R=301,E=REDIRECTED:true] 

để ngăn chặn vòng lặp, nhưng tất cả tôi có thể nhận được là hoặc là một chuyển hướng vòng lặp (trường hợp 1) hoặc ev en một lỗi 500 máy chủ trên một số biến thể :(

Thêm này

RewriteCond %{REQUEST_URI} !^/(www|admin|api) [NC] 

cũng sẽ không làm việc kể từ khi tôi không thay đổi URL trong thanh địa chỉ. Tôi cũng không thành công với lá cờ [P].

Có ai giúp được không? Cảm ơn!

Trả lời

4

Bạn đã thử sử dụng cấu hình tuyến đường của Codeigniter chưa?

bạn không phải sử dụng htaccess ghi đè - mặc dù đó là phương pháp hợp lệ, bạn chỉ có thể kiểm tra tên miền phụ trong tệp config/route.php và đặt định tuyến cho tên miền phụ của bạn.

switch ($_SERVER['HTTP_HOST']) { 
    case 'admin.domain.com': 

     $route['(:any)'] = "admin/$1"; // this will set any uri and add the controler fodler to it 

     $route['default_controller'] = "admin/home"; // set the default controller for this subdomain 

     break; 

    case 'api.domain.com': 

     $route['(:any)'] = "api/$1"; // this will set any uri and add the controler fodler to it 

     $route['default_controller'] = "api/home"; // set the default controller for this subdomain 

     break; 
} 

Nếu bạn muốn nó trở thành một/dynamic routing chung chung hơn, bạn có thể có nó như thế này (trong cùng một tập tin config/route.php):

$controllerFolderName = array_shift((explode(".",$_SERVER['HTTP_HOST']))); 

$route['(:any)'] = $controllerFolderName."/$1"; 
$route['default_controller'] = $controllerFolderName."/home"; 

định tuyến này sẽ làm việc cho tất cả các tên miền phụ và sẽ đặt định tuyến mặc định thành thư mục bên trong thư mục điều khiển có cùng tên với tên miền phụ, vì vậy đối với tên miền như api.domain.com, bạn sẽ có tuyến đường được đặt thành api, v.v.

Điều quan trọng là bạn giữ cùng một logic cho tất cả tên thư mục mà chúng sẽ luôn khớp với tên miền phụ của bạn và tôi cũng sẽ đề xuất thêm hệ thống xử lý lỗi cho khách truy cập không có tên miền phụ (http://domain.com) và trong trường hợp bạn có tên miền phụ nhưng một thư mục có tên đó không tồn tại (bạn có thể làm điều đó với file_exits)

+0

Cảm ơn bạn đã phản hồi nhanh nhưng ý tưởng của tôi là làm điều đó ở mức thấp nhất có thể. Và nếu bạn cũng đi vào xem xét rằng tôi không phải là trung bình của bạn "chỉ cần làm cho nó làm việc" anh chàng bạn sẽ nhận ra đây không phải là một giải pháp hợp lệ cho tôi: |. Tôi muốn một cái gì đó năng động và dễ dàng để duy trì mà không cần phải lặp lại các quy tắc và các tuyến đường và các công cụ. –

+1

Vì vậy, bạn muốn cuộc sống dễ dàng .... đó là một cách tiếp cận rất tốt ... hãy để tôi cập nhật phản hồi của tôi – Lupin

+0

Cách tiếp cận này là một chút sạch hơn :) Và tôi có thể hơi quá cầu kỳ nhưng khi tôi nói Tôi muốn làm điều này ở mức thấp nhất có thể tôi đã thực sự bày tỏ mong muốn của tôi cho vấn đề này được giải quyết bằng cách sử dụng chuyển hướng ** htaccess ** vì các vấn đề hiệu suất trong trường hợp của tôi :) –

1

Sau một vài giờ đào, tôi nghĩ rằng tôi đã giải quyết được vấn đề. Đây là cách (đối với những người mà quan tâm):

# Subdomains to Folders + Enforce www RewriteCond %{HTTP_HOST} ^(www|admin|api) [NC] RewriteRule ^(.*)$ http://www.localhost/%1/$1 [L,P,S=1] RewriteRule ^(.*)$ http://www.localhost/$1 [L,R=301]

tôi kết hợp các chuyển hướng nội bộ với các quy tắc www chấp hành viên. Tất cả những gì cần làm sau khi cấu hình máy chủ Apache để chấp nhận và chuyển hướng đúng yêu cầu PROXY :)

Có phun!

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