.htaccess ghi lại tên miền phụ vào thư mục


Câu trả lời:


107

Hãy thử đưa cái này vào tệp .htaccess của bạn:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub.domain.com
RewriteRule ^(.*)$ /subdomains/sub/$1 [L,NC,QSA]

Để có quy tắc chung hơn (hoạt động với bất kỳ miền phụ nào, không chỉ sub), hãy thay thế hai dòng cuối cùng bằng:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]

3
Giải pháp của Ansari sẽ hoạt động, tuy nhiên, khi tôi điều hướng đến http://test.domain.com, URL sẽ chuyển hướng tôi đến http://test.domain.com/subdomains/test/. Có thể mà không hiển thị /subdomains/test/ở cuối?
Erik Djupvik

2
Trong trường hợp đó, tôi tin rằng bạn sẽ phải xem xét việc sử dụng mod_proxy và chỉ định một Pcờ bên cạnh L.
Ansari

1
Không, nó chuyển hướng đến http://test.domain.com/subdomains/test/, khi tôi chỉ muốn nó hiển thịhttp://test.domain.com/
Erik Djupvik

1
Tôi không thể thấy cách nó chuyển hướng đến test.domain.com/subdomains/test- có thể có điều gì đó khác đang xảy ra ở đây. Bạn có thể thêm RewriteBase /ngay sau đây RewriteEngine on? Ngoài ra, nếu bạn muốn giữ nó hiển thị, test.domain.combạn sẽ phải sử dụng mod_proxy và [P]cờ.
Ansari

1
Tôi đã có thể làm cho nó hoạt động bằng cách sử dụng câu trả lời của @ anubhava tại đây: stackoverflow.com/a/22395008/128984
Micah

50

Tôi không phải là chuyên gia về mod_rewrite, tôi thường gặp khó khăn với nó, nhưng tôi đã làm điều này trên một trong các trang web của mình, nó có thể cần các cờ khác, v.v. tùy thuộc vào hoàn cảnh của bạn. Tôi đang sử dụng cái này:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteCond %{REQUEST_URI} !^/subdomains/subdomain
RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L] 

Bất kỳ quy tắc viết lại nào khác cho phần còn lại của trang web phải được thực hiện sau đó để ngăn chúng can thiệp vào việc viết lại tên miền phụ của bạn.


Tôi sẽ nói như vậy. Tôi thấy cài đặt này là cài đặt phù hợp giống như câu trả lời của tôi ở đây .
Chetabahana,

5
Chỉ như một tài liệu tham khảo, trong trường hợp ai đó bắt đầu truy .htaccesscập vào trang này (như tôi đã làm), ngoài việc tạo .htaccesstệp thực , để tệp có hiệu lực, bạn cần phải đặt AllowOverridetrong VirtualHostcài đặt của mình ( stackoverflow.com/a/22819550/1657502 ) , cho phép Apache của rewritemô-đun và sau đó khởi động lại Apache ( stackoverflow.com/a/5758551/1657502 )
Antonio Vinicius Menezes Medei

Điều này sẽ không hoạt động nếu bạn sử dụng www để truy cập tên miền phụ. @Minh giải pháp sẽ hoạt động trong mọi trường hợp.
Rohan Khude

@RohanKhude, ý bạn là nếu bạn muốn www.example.com và example.com phân phát nội dung khác nhau? Bởi vì thông thường, đối với SEO, bạn sẽ có www.example.com để đưa ra chuyển hướng vĩnh viễn đến example.com hoặc ngược lại.
Lee Kowalkowski

1
@RohanKhude www như một tên miền phụ của một tên miền phụ cũng là thứ bạn cũng phải bắt đầu hoạt động ở cấp DNS, phải không? Tôi nghĩ rằng kỳ vọng của bạn rằng nó sẽ hoạt động cho bất kỳ tên miền phụ tùy ý nào là không chính xác. Câu trả lời của Minh ( stackoverflow.com/a/41389905/30945 ) giả định rằng cấu hình .htaccess của bạn hỗ trợ 1 và chỉ 1 tên miền phụ, vì vậy ở khía cạnh đó kém mạnh mẽ hơn. Giải pháp của tôi hỗ trợ bao nhiêu tên miền phụ mà bạn cần, nhưng có, bạn cần xác định rõ ràng mọi tên miền phụ được hỗ trợ, nhưng www.tiền tố tùy chọn có lẽ được hỗ trợ tốt nhất thông qua chuyển hướng hơn là viết lại.
Lee Kowalkowski

16

Bạn có thể sử dụng quy tắc sau trong .htaccess để ghi lại miền phụ vào một thư mục con:

RewriteEngine On

 # If the host is "sub.domain.com"
 RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
 # Then rewrite any request to /folder
 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

Giải thích từng dòng:

  RewriteEngine on

Dòng trên thông báo cho máy chủ bật công cụ để viết lại URL.

  RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]

Dòng này là điều kiện cho Quy tắc viết lại mà chúng tôi khớp với máy chủ HTTP bằng cách sử dụng mẫu regex. Điều kiện nói rằng nếu máy chủ lưu trữ là sub.domain.com thì hãy thực thi quy tắc.

 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

Quy tắc khớp với http://sub.domain.com/foo và chuyển hướng nội bộ đến http://sub.domain.com/folder/foo .

Thay thế sub.domain.com bằng tên miền phụ và thư mục của bạn bằng tên của thư mục mà bạn muốn trỏ miền phụ của mình đến.


1
Đây là câu trả lời chính xác cho tôi - giải thích về cách tôi đến đây như sau. Đã đến đây để tìm kiếm sự cố cũ với chuyển hướng tên miền phụ đã bị lỗi khi tôi cài đặt SSL trên TLD của trang web chính. Việc chuyển hướng ban đầu vẫn đang cố gắng sử dụng vẫn còn TLD của trang web chính và vi phạm các quy tắc bảo mật. Những gì tôi cần là giữ tên miền phụ (nằm trên một TLD hoàn toàn khác) trên cùng một máy chủ lưu trữ nhưng cách xa trang web chính. Thêm quy tắc ghi lại như trên cho phép tôi chuyển tiếp miền phụ hoàn chỉnh đến thư mục được lưu trữ trong trang TLD chính.
Richard Bown,

8

Tôi gặp vấn đề tương tự và tìm thấy lời giải thích chi tiết trong http://www.webmasterworld.com/apache/3163397.htm

Giải pháp của tôi (nội dung tên miền phụ phải nằm trong một thư mục có tên sd_subdomain:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} subdomain\.domain\.com
RewriteCond $1 !^sd_
RewriteRule (.*) /sd_subdomain/$1 [L]

1
Nó không hoạt động với tôi, tôi phải định cấu hình thứ gì đó trong vùng dns của miền?
totoaussi

1
@totoaussi bạn nên tạo bản ghi * A hoặc bản ghi A cho mỗi tên miền phụ, trỏ đến cùng một máy chủ.
Pablo Torrecilla

4

Điều này chuyển hướng đến cùng một thư mục đến một miền phụ:

.httaccess

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain\.com/subdomains/%1

3

Cố gắng đặt tệp .htaccess này vào thư mục tên miền phụ:

RewriteEngine On

RewriteRule ^(.*)?$ ./subdomains/sub/$1

Nó chuyển hướng đến http://domain.com/subdomains/sub/ , khi bạn chỉ muốn nó hiển thị http://sub.domain.com/


Câu hỏi được hỏi vào năm 2012 và có 8 câu trả lời. Câu trả lời của bạn có thêm giá trị vào thời điểm này không?
ppovoski

Giải pháp này sẽ làm việc ngay cả khi bạn sử dụng www để truy cập tên miền phụ
Rohan Khude

2

Chuyển hướng thư mục tên miền phụ:

RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC]
RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]

0

Đối với bất kỳ yêu cầu miền phụ nào, hãy sử dụng cái này:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.band\.s\.co 
RewriteCond %{HTTP_HOST} ^(.*)\.band\.s\.co 
RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9-z\-]+) 
RewriteRule ^(.*)$ /%1/$1 [L] 

Chỉ cần tạo một số thư mục giống như tên miền phụ mà bạn cần. Thư mục phải tồn tại như sau: domain.com/sub cho sub.domain.com .


Điều này làm việc cho tôi nhưng nó không giữ tệp. Ví dụ sub.domain.com/index.php ném 404
Paolo Falomo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.