2009-04-22 44 views
5

(Tôi biết đây không phải là một câu hỏi lập trình cho mỗi gia nhập, nhưng nó liên quan đến biểu thức thông thường, vì vậy ít nhất nó là ranh giới ...)Apache và mod_rewrite: Chuyển tên miền vào thư mục con

Các thiết lập:

Apache 2.0 với mod_rewrite trên Windows. Hai tên miền, hãy gọi chúng là domain1.example và domain2.example. Tôi muốn lưu trữ cả hai tên miền trên cùng một máy chủ ("server1"), vì vậy tôi trỏ chúng đến cùng một địa chỉ IP.

Bây giờ, nếu người dùng nhập "domain2.example" vào trình duyệt của mình, tôi muốn anh ta kết thúc trong thư mục con ** trên máy chủ nhưng để nguyên miền mà anh ấy đã nhập nguyên vẹn ("domain2.example/domain2 /"). Việc chuyển hướng phải để lại tất cả các liên kết tuyệt đối và tương đối trên các trang trong miền/thư mục này còn nguyên vẹn, tất nhiên.

Điều này có thể thực hiện với mod_rewrite (hoặc máy chủ ảo Apache hoặc phương pháp khác) và làm cách nào để thực hiện điều này?

** "Thư mục phụ" trong trường hợp này không thực sự là thư mục tệp trên đĩa, mà là thư mục ảo được thực hiện với chỉ thị "Vị trí" Apache.

Cảm ơn.

Trả lời

2

Tôi không tin rằng bạn cần sử dụng mod_rewrite, bạn sẽ có thể sử dụng vhost cho mục đích này như bạn đề xuất. Để làm điều này, bạn sẽ có một vhost đơn với tên miền máy chủ tên miền2.example trỏ đến thư mục bạn muốn. Điều này cũng sẽ sử dụng chỉ thị ServerAlias ​​cho domain1.example vì vậy các yêu cầu cho điều này đi đến cùng một thư mục.

Xem tài liệu cho ServerAliasDocumentRoot. Cũng lưu ý rằng nếu bạn muốn thư mục hiển thị trong URL, bạn sẽ cần sử dụng mod_rewrite.

3

Giả sử rằng các miền được độc lập giải pháp được khuyên là máy chủ ảo.

Bạn có thể tìm tài liệu tại số apache website.

+0

Sẽ chỉ thị DocumentRoot (trong vhost cấu hình phần) làm việc để chuyển tiếp đến một "thư mục con" đó thực sự là một "Địa điểm" và không phải là một thư mục tập tin vật lý trên máy chủ? – ObiWanKenobi

+0

Bạn có ý gì với Vị trí chứ không phải thư mục tệp? Tôi đoán bạn có index.html/index.php/index.cgi ở đâu đó và bạn đặt DocumentRoot vào thư mục chứa tập tin đó. –

+0

Với "Location", ý tôi là: http: //httpd.apache. org/docs/2.0/mod/core.html # location Kết hợp cụ thể với chỉ thị SetHandler: http://httpd.apache.org/docs/2.0/mod/core.html#sethandler Vì vậy, không có vật lý tập tin (index.htm, index.php, bất cứ điều gì), mà là một chuyển tiếp đến một "Handler" (pls_handler, tức là mod_plsql, trong trường hợp cụ thể của tôi). – ObiWanKenobi

6

Tôi giả sử bạn không có quyền truy cập vào cấu hình Apache, nếu không, có, máy chủ ảo là lựa chọn tốt nhất của bạn. Nếu bạn không, tuy nhiên, điều này có thể được đặt trong một tập tin .htaccess và nên làm các trick:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.+)\.yourwebsite\.com$ 
RewriteRule ^/(.*)$ /path/to/your/subdomains/%1/$1 [L] 

Vì vậy, một yêu cầu đến http://foo.yourwebsite.com/bar sẽ đi đến /path/to/your/subdomains/foo/bar

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