2010-04-09 11 views
7

Tôi có một apache trong giao diện người dùng chuyển hướng một yêu cầu thông qua quy tắc viết lại. tôi phải đặt một xác thực cơ bản trước khi chuyển hướng yêu cầu, vì vậy tôi đặt điều này trong tập tin cấu hình:apache: xác thực cơ bản trước khi viết lại

<VirtualHost *:443> 
    ServerAdmin xxxxxx 
    DocumentRoot /var/www/html/ 
    ServerName xxxxxxx 
    RewriteEngine on 
    ErrorLog logs/error.log 
    CustomLog logs/access_log common 

    <Directory /var/www/html/> 
     AuthType Basic 
     AuthName "Restricted Files" 
     AuthUserFile /etc/httpd/conf/tag.pwd 
     Require valid-user 
     RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [P,L] 
    </Directory> 
</VirtualHost> 

Nhưng không hoạt động.

Mọi đề xuất?

+0

Bạn mong đợi điều gì sẽ xảy ra? Điều gì đã xảy ra? Bạn đã làm gì để làm cho nó xảy ra? Bạn đã thử cái gì khác? –

+0

Tôi hy vọng rằng tất cả các yêu cầu sau khi xác thực sẽ được chuyển hướng với quy tắc RewriteRule ^/(. *) Http: // xxxxxx: xxx/$ 1 [P, L] nhưng điều này không xảy ra Apache tìm kiếm trang dưới/var/www/html – pyro

Trả lời

5

tôi giải quyết đặt điều kiện viết lại và viết lại quy tắc bên ngoài chỉ thị Locatio:

<Location /> 
    AuthType Basic 
    AuthName "Restricted Files" 
    AuthUserFile /etc/httpd/conf/tag.pwd 
    Require valid-user 
</Location> 
RewriteCond %{LA-U:REMOTE_USER} !^$ 
RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [P,L] 

nhiều nhờ h0tw1r3 cho đề nghị

* Hãy nhớ rằng chỉ Location hoạt động trên URL, và không phải thư mục. Điều đó có nghĩa là nếu ai đó tạo bí danh cho gốc tài liệu, họ sẽ bỏ qua hoàn toàn các quy tắc xác thực này. (Xem http://httpd.apache.org/docs/2.0/mod/core.html#location để biết thêm.)

2

Cập nhật: Quy tắc thư mục ngầm đảm bảo xác thực luôn được yêu cầu trước khi ghi đè xong. Tìm thấy rằng sự kết hợp khác nhau của mô-đun apache thay đổi hành vi, do đó câu trả lời chấp nhận có thể không phải lúc nào cũng hoạt động.

<Location /> 
    AuthType Basic 
    AuthName "Restricted Files" 
    AuthUserFile /etc/httpd/conf/tag.pwd 
    Require valid-user 
</Location> 

<Directory /documentroot> 
    RewriteCond %{LA-U:REMOTE_USER} (.+) 
    RewriteRule (.*) http://xxxxxx:xxx/$1 [P,L] 
</Directory> 
+0

mmm nó không hoạt động: (apache tiếp tục tìm kiếm trang cục bộ – pyro

+0

Gần đây điều này lại xuất hiện, ngay cả câu trả lời được chấp nhận của pyro cũng không hoạt động đối với tôi trên Apache 2.2.22 (Ubuntu). – h0tw1r3

10

Nói chung, Apache thực hiện pha ghi đè trước giai đoạn ủy quyền, đó là lý do mã của bạn thực hiện ghi lại mà không bao giờ yêu cầu người dùng xác thực.

Bạn có thể thực hiện việc này với biến số LA-U:REMOTE_USER. Lời nói đầu RewriteRule của bạn với một điều kiện mà trông về phía trước ("LA") sang giai đoạn ủy quyền:

RewriteCond %{LA-U:REMOTE_USER} !^$ 
RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [L] 

Xem chú thích về điều này trong http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond

Áp phích khác như chỉ ra, nó cũng tốt hơn để có những chỉ thị RewriteRule ra khỏi khối để chúng đáng tin cậy hơn.