2009-08-31 24 views
8

Tôi có một số trang web: example.com, example1.comexample2.com. Tất cả chúng đều trỏ đến thư mục /public_html của máy chủ của tôi, đó là thư mục gốc Apache của tôi.Chỉ sử dụng HTTP Auth nếu truy cập vào một miền cụ thể

Tôi cần thêm gì vào tệp .htaccess của mình để chỉ sử dụng xác thực http nếu người dùng đến từ example2.com? example.comexample1.com KHÔNG được sử dụng xác thực.

tôi biết mình cần cái gì đó như

AuthType Basic 
AuthName "Password Required" 
AuthUserFile "/path/to/.htpasswd" 
Require valid-user 

Nhưng tôi chỉ muốn yêu cầu một mật khẩu nếu dùng đang truy cập example2.com.

Sửa

Sử dụng một cách tiếp cận đề xuất trong một câu trả lời, tôi đã như sau trong tập tin .htaccess của tôi:

SetEnvIfNoCase Host ^(.*)$ testauth 
<IfDefine testauth> 
RewriteRule ^(.*)$ index2.php?q=$1 [L,QSA] 
</IfDefine> 

Tôi biết rằng các mô-đun mod_setenvif.c được kích hoạt (tôi xác minh với < IfModule> block), nhưng nó sẽ xuất hiện rằng "testauth" không bao giờ được xác định, bởi vì thử nghiệm của tôi để xác minh (chuyển hướng đến index2.php) không thực thi (trong khi nó đã được thực thi trong khối < IfModule> của tôi). Bất kỳ ý tưởng tại sao?

+0

Nếu tất cả các lĩnh vực đang trỏ đến cùng một nơi, tại sao bạn muốn bảo vệ chỉ một trong số họ? Nếu bạn thực sự phục vụ nội dung khác nhau, tại sao không có cách tiếp cận saner giống như một thư mục trên mỗi miền? –

+0

Tôi đang chạy một cài đặt Drupal nhiều trang trong thư mục/public_html của mình và tôi muốn tạo http xác thực chăn trên một trong các trang web, ngoài thông tin đăng nhập người dùng thông thường của trang web đó. –

+0

Multisite của Drupal cho phép tôi chạy các trang web khác nhau trên cùng một tập các tệp PHP, nhưng với các cơ sở dữ liệu khác nhau (vì vậy nội dung khác nhau). Tôi có thể làm một cài đặt thứ hai trong một thư mục con, nhưng điều đó sẽ yêu cầu tôi phải duy trì các tập tin và mô-đun riêng biệt. –

Trả lời

1

Bạn không nên đặt cấu hình cho mỗi vhost vào .htaccess. Thay vào đó, hãy đặt khối cấu hình trong khối VirtualHost trong tệp cấu hình thích hợp trong /etc/apache/sites-enabled/*.

+0

Tôi không có quyền truy cập vào các tệp vhost, thật không may. Tôi đang chạy tất cả điều này trên một máy chủ lưu trữ được chia sẻ thông qua CPanel. = ( –

2

Tôi tự hỏi liệu DanH có được trợ giúp bằng cách tiếp cận cho phép truy cập theo địa chỉ IP không?

Something như

SetEnvIf Remote_Addr 1\.2\.3\.4 AllowMeIn 
SetEnvIfNoCase Host this\.host\.is\.ok\.com AllowMeIn 
SetEnvIfNoCase Host this\.host\.is\.also\.ok\.com AllowMeIn 

và sau đó trong Drupal "container" của bạn

Order Allow,Deny 
Allow from env=AllowMeIn 

nên làm các trick.

Bất kỳ máy chủ nào là "trực tiếp" phải được định cấu hình thành "AllowMeIn", nếu không bạn phải đến từ một địa chỉ IP đã biết (nghĩa là bạn và các nhà phát triển khác).

+0

Perfect nó hoạt động nhờ giải thưởng Will trong 4 giờ – DanH

16

Làm thế nào về một cái gì đó dọc theo dòng này trong file .htaccess trong thư mục gốc tài liệu:

# set the "require_auth" var if Host ends with "example2.com" 
SetEnvIfNoCase Host example2\.com$ require_auth=true 

# Auth stuff 
AuthUserFile /var/www/htpasswd 
AuthName "Password Protected" 
AuthType Basic 

# Setup a deny/allow 
Order Deny,Allow 
# Allow for everyone 
Allow from all 
# Except if a auth is required 
Deny from env=require_auth 
# But if you have a user you are welcome 
Require valid-user 
# Auth OR access, not AND https://wiki.apache.org/httpd/BypassAuthenticationOrAuthorizationRequirements 
Satisfy any 

Điều này sẽ làm cho nó để xác thực là không cần thiết trừ khi chủ nhà kết thúc với example2.com (ví dụ www.example2.com, dev.example2.com, vv). Biểu thức có thể được tinh chỉnh nếu cần. Bất kỳ máy chủ lưu trữ nào khác sẽ khiến số require_auth var không được đặt để xác thực là không phải là yêu cầu. Nếu điều này cần phải theo cách khác, dòng cuối cùng có thể được thay đổi thành: Allow from env=require_auth, xóa !.

+2

Đối với tôi require_auth không làm việc, nhưng điều này không:! Allow from all Deny từ env = require_auth Yêu cầu người dùng hợp lệ Đáp ứng bất kỳ –

+0

Thank you very much –

+0

Người dùng afaik có thể khai thác điều này bằng cách yêu cầu "example2.com." (Chú ý dấu chấm ở cuối). Vì vậy, quy tắc của bạn nên là 'SetEnvIfNoCase Host example2 \ .com \.? $ ...' nếu không nội dung có thể vẫn hiển thị mà không cần bảo vệ. – Matmarbon

5

Dưới đây là một đề nghị:

Tạo một tập tin gọi common.conf và lưu tại một vị trí dễ tiếp cận

Ở vị trí tập tin này cấu hình Apache chung cho tất cả các trang web (host).

Các loại bỏ các mục VirtualHost đơn hiện một thay thế với mục VirtualHost như sau:

# These are the password protected hosts 
<VirtualHost *:80> 
ServerName example.com 
ServerAlias example1.com 

Include /path-to-common-configuration/common.conf 

AuthType Basic 
AuthName "Password Required" 
AuthUserFile "/path/to/.htpasswd" 
Require valid-user 
</VirtualHost> 

# These are hosts not requiring authentication 
<VirtualHost *:80> 
ServerName example2.com 
ServerAlias example3.com 

Include /path-to-common-configuration/common.conf 

</VirtualHost> 
1

Apache 2.4 cung cấp một lựa chọn ngữ nghĩa với If chỉ:

<If "req('Host') == 'example2.com'"> 
    AuthUserFile /path/to/htpasswd 
    AuthType Basic 
    AuthName "Password Protected" 
    Require valid-user 
</If> 
<Else> 
    Require all granted 
</Else> 
Các vấn đề liên quan