2008-09-08 32 views
27

Tôi đang cố gắng chuyển hướng các yêu cầu cho một tên miền ký tự đại diện đến một thư mục con.
tức là. something.blah.domain.com ->blah.domain.com/somethingViết lại Apache dựa trên tên miền phụ

Tôi không biết cách sử dụng tên miền phụ để sử dụng trong quy tắc viết lại.

chung kết Giải pháp:

RewriteCond %{HTTP_HOST} !^blah\.domain\.com 
RewriteCond %{HTTP_HOST} ^([^.]+) 
RewriteRule ^(.*) /%1/$1 [L] 

Hoặc như chỉ ra bởi pilif

RewriteCond %{HTTP_HOST} ^([^.]+)\.media\.xnet\.tk$ 

Trả lời

31

Bạn nên có một cái nhìn tại URL Rewriting Guide từ tài liệu apache.

Sau đây là chưa được kiểm tra, nhưng nó nên để lừa:

RewriteCond %{HTTP_HOST} ^([^.]+)\.blah\.domain\.com$ 
RewriteRule ^/(.*)$   http://blah.domain.com/%1/$1 [L,R] 

chỉ này hoạt động nếu các tên miền phụ không chứa dấu chấm. Nếu không, bạn phải thay đổi Regexp trong RewriteCond để khớp với bất kỳ ký tự nào vẫn hoạt động do neo, nhưng điều này chắc chắn cảm thấy an toàn hơn.

+1

Cảm ơn. Làm việc như một say mê. – goo

+0

Lưu ý "khi KHÔNG sử dụng Rewrite": http://httpd.apache.org/docs/2.2/rewrite/avoid.html#redirect – marcovtwout

3

Hãy thử điều này:

RewriteCond %{HTTP_HOST} (.+)\.blah\.domain\.com 
RewriteRule ^(.+)$ /%1/$1 [L] 

@pilif (xem bình luận): Được rồi, đó là sự thật. Tôi chỉ sao chép một .htaccess mà tôi sử dụng trên một trong các dự án của mình. Đoán nó có cách tiếp cận hơi khác :)

+0

giải pháp của bạn không chuyển hướng đến blah.domain.com nhưng chỉ viết lại cho something.blah .domain.com/cái gì đó, đó không phải là cách tôi đọc câu hỏi gốc. – pilif

+0

Tôi đoán đó là OK nếu cả hai đều được phục vụ bởi cùng một VirtualHost. Đặc biệt, làm theo cách này có nghĩa là khách hàng không thấy chuyển hướng - họ vẫn thấy cái gì đó.blah.example.com. –

1

@Sam

Dòng RewriteCond của bạn sai. Việc mở rộng biến được kích hoạt bằng% chứ không phải $.

RewriteCond %{HTTP_HOST} ^([^\.]+)\.media\.xnet\.tk$ 
      ^

rằng nên làm các trick

+0

HA! một typo nhân vật tấn công một lần nữa :( – Sam

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