2012-03-11 39 views
5

thể trùng lặp:
Apache rewrite based on subdomainCách viết lại tên miền phụ thành biến trong URL?

Có thể viết lại một URL như thế này?

www.foo.website.com/some-page 

để

www.website.com/some-page?var=foo 

tôi hỏi về một viết lại (Tôi nghĩ rằng đó là những gì nó được gọi là) và không phải là một chuyển hướng. tức là tôi muốn URL đầu tiên ở lại trong thanh địa chỉ, nhưng để máy chủ "nhận" URL thứ hai.

Tôi chưa bao giờ hiểu làm thế nào để làm được ghi đè URL và cho đến nay những nỗ lực thảm hại của tôi để làm việc này đã thất bại thảm hại :-)

tôi nên thêm rằng tập tin .htaccess này cũng đang được sử dụng bởi WordPress và có đoạn mã sau:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /~kbj/ 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /~kbj/index.php [L] 
</IfModule> 

Bất kỳ trợ giúp hoặc lời khuyên nào sẽ được đánh giá rất nhiều!

+2

http://stackoverflow.com/questions/49500/apache-rewrite-based-on-subdomain –

Trả lời

2

Những gì tôi sẽ giải thích là cho các trang web đa ngôn ngữ, nhưng bạn có thể dễ dàng áp dụng điều này với những gì bạn đang hỏi: đổi tên "LANGUAGE" thành "var" (nụ cười).

Đây là những gì bạn có thể muốn làm, để có thể xử lý trong nhiều ngôn ngữ phụ trong tương lai. Kiểm tra máy chủ của bạn: nếu nó chứa "ngôn ngữ đã biết", hãy thêm nó vào biến toàn cục (= biến môi trường từ quan điểm của Apache), sau đó ở cuối, nếu biến "ngôn ngữ" không được đặt, đặt làm mặc định ngôn ngữ. Và cuối cùng, thêm nó làm tham số.

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.website\.com$ 
    RewriteRule ^(.*)$ "http://www.website.com/$1?var=%1" [P] 

    RewriteCond %{HTTP_HOST} ^(www\.)?(us|fr|pt)\.mydomain\.com$ 
    # Create an environment variable to remember the language: 
    RewriteRule (.*) - [QSA,E=LANGUAGE:%2] 
    # Now check if the LANGUAGE is empty (= doesn't exist) 
    RewriteCond %{ENV:LANGUAGE} ^$ 
    # If so, create the default language (=es): 
    RewriteRule (.*) - [QSA,E=LANGUAGE:es] 
    # Add the language to the URI (without modifying it): 
    RewriteCond (.*) $1?language={ENV:LANGUAGE} [QSA] 

</IfModule> 

(lưu ý: xin vui lòng ... sử dụng thụt đầu dòng thích hợp).

0

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

RewriteCond %{HTTP_HOST} ^([^.]+).domain.com$ 
RewriteRule (.*) http://www.domain.com/$1?subdomain=%1 

Phải mất tất cả mọi thứ mà nó tìm thấy như một tên miền phụ và bản đồ nó vào tập tin tên miền chính với tên sub miền gắn liền như một tham số get.

2
RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.website\.com$ 
RewriteRule ^(.*)$ "http://www.website.com/$1?var=%1" [P] 

Sử dụng cờ P để ủy quyền yêu cầu.

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_p

+0

Cảm ơn câu trả lời của bạn. Tôi đã thử sử dụng mã bạn đề xuất, nhưng tiếc là nó không hoạt động. Tôi đã thử xóa mọi thứ khỏi tệp .htaccess ngoại trừ http://pastebin.com/4i7LKn48 và sau đó duyệt đến www.test.website.com và tôi gặp phải lỗi "Máy chủ không tìm thấy". Bất kỳ ý tưởng tại sao nó không hoạt động? Cảm ơn một lần nữa vì sự giúp đỡ của bạn. – Nate

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