2010-11-01 27 views
19

Chúng tôi có máy chủ cục bộ, máy chủ trung tâm, dàn dựng và máy chủ sản xuất. Tuy nhiên, dev và dàn dựng được bảo vệ bằng mật khẩu vì lý do rõ ràng. Vì vậy, sau khi triển khai bất kỳ thay đổi nào đối với htaccess tôi phải tự chỉnh sửa tệp htaccess để cho phép bảo vệ mật khẩu trên máy chủ dev và dàn dựng.Các khối mã tên miền cụ thể trong htaccess

Có cách nào để có khối có điều kiện dựa trên tên miền như:

if ($domain == "dev.example.com" || $domain == "staging.example.com"){ 
    AuthName "Password Protected Area" 
    AuthType Basic 
    AuthUserFile /somewhere/.htpasswd 
    Require valid-user 
} 

tôi cần phải tìm ra tương đương htaccess của tình trạng này:

if ($domain == "dev.example.com" || $domain == "staging.example.com"){ 

} 

tôi sẽ đánh giá cao sự giúp đỡ bất kỳ hoặc con trỏ bạn có thể cho.

Trả lời

28

Trong khi làm việc đó thông qua các VirtualHost và không phải là một .htaccess là tốt hơn nhiều, bạn có thể sử dụng các giải pháp sau đây nếu module setenvif đang hoạt động:

SetEnvIf Host ^dev\.site\.com$ is_on_dev_site 
SetEnvIf Host ^staging\.site\.com$ is_on_dev_site 
Order deny,allow 
Deny from env=is_on_dev_site 
# require password if access would otherwise be denied 
Satisfy any 
# Put your password auth stuff here 

Bạn cũng có thể làm điều đó với một danh sách trắng mà có lẽ tốt hơn vì nó đảm bảo các trang web dev của bạn vẫn được bảo vệ ngay cả khi ai đó quyết định cho phép truy cập chúng thông qua www.dev.site.com v.v .:

SetEnvIf Host ^site\.com$ is_on_public_site 
SetEnvIf Host ^www\.site\.com$ is_on_public_site 
Order deny,allow 
Deny from all 
Allow from env=is_on_public_site 
Satisfy any 
# Put your password auth stuff here 

Nếu bạn không có mod_setenvif trên máy chủ của bạn, cũng có thể mod_rewrite làm công việc cho bạn (thay thế các khối SetEnvIf trong ví dụ danh sách trắng với những điều sau đây):

RewriteEngine On 
RewriteCond %{HTTP_HOST} =site.com 
RewriteRule^- [E=is_on_public_site:yes] 
RewriteCond %{HTTP_HOST} =www.site.com 
RewriteRule^- [E=is_on_public_site:yes] 
+0

Chỉ cần một người đứng đầu về an ninh: HTTP_HOST được cung cấp bởi khách hàng, và là giả mạo. Ngoài ra, một số proxy sẽ tách giá trị ra để bạn thậm chí không thể dựa vào nó. Bạn nên sử dụng SERVER_NAME do máy chủ cung cấp. – Andri

+3

Khi máy chủ ảo dựa trên tên được tham gia, tôi không nghĩ HTTP_HOST là giả mạo.Hoặc để chính xác hơn, nó là giả mạo tất nhiên nhưng sau đó yêu cầu sẽ không bao giờ đạt đến đích dự định của nó. – ThiefMaster

+0

Vì vậy, nếu yêu cầu đi kèm với HTTP_HOST không khớp với bất kỳ máy chủ ảo nào, nó sẽ không hoạt động ở đâu? – Andri

1

Bạn nên làm điều này trong trang web của bạn tập tin conf với:

<VirtualHost domain.com:80> 

...config statements here 

</VirtualHost> 

<VirtualHost domain2.com:80> 

....config statements here 

</VirtualHost> 

Nếu bạn là với một loạt người không cho phép bạn chỉnh sửa các trang web của bạn tập tin cấu hình, đó là một khả năng thực sự nếu bạn đang có một máy chủ chia sẻ sau đó bạn nên xem xét VPS hoặc lưu trữ dành riêng.

+1

tôi có thể làm điều này, tuy nhiên tôi không muốn thực hiện thay đổi đó trên tất cả các máy chủ .. tôi lười biếng! :) –

5

Tôi tìm thấy một giải pháp tốt đẹp, để phân biệt "localhost" và "sống":

Kể từ khi điều kiện của htaccess có phần hạn chế tại sao không giải quyết cho IfModule? : So sánh các mô-đun bạn có (ví dụ: sử dụng và tìm kiếm sự khác biệt đáng kể về lâu dài, hy vọng, ví dụ: nếu bạn phát triển trên các cửa sổ và triển khai trên linux mod_win32.c có thể là tốt. (Đừng quên để thêm .c mà phpinfo() ommits.)

Sau đó, bạn có thể đi về nó như thế này (thử nghiệm):

<IfModule mod_win32.c> 
    RewriteRule ^banana$ test.php?dudeThisIsLocal=1 
</IfModule> 
<IfModule !mod_win32.c> 
    RewriteRule ^banana$ test.php?dudeThisIsLive=1 
</IfModule> 

Ví dụ này làm cho một bài kiểm tra sự tỉnh táo tốt, browing để resp/yourdomain/chuối. localhost/banana và nếu bạn (có viết lại được kích hoạt) đổ mảng $ _GET trong test.php. Nếu điều này làm việc, hãy điền vào các tệp mã với các câu lệnh cấu hình thực của bạn.

+0

Rất đẹp, cảm ơn! – ciscoheat

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