2012-01-08 34 views

Trả lời

28

Bạn chỉ có thể đặt một biến môi trường từ .htaccess:

SetEnv MYVAR whatever 

Và điều này trở nên có sẵn trong mảng $_SERVER:

print $_SERVER["MYVAR"]; 

Vì vậy, không hẳn là một biến toàn cầu. Nhưng vẫn hữu ích cho một số mục đích.

(Các tùy chọn khác được tuyên bố một auto_prepend_file phải xác định trước các biến. Nhưng đó là hơn một workaround sau đó.)

+0

+1 Tôi đã học được điều gì đó mới mẻ. Trong trường hợp nào là thực hành tốt để thiết lập một biến môi trường từ tệp .htaccess? – Josh

+0

Tôi chủ yếu sử dụng điều này để khai báo tên tài nguyên/đường dẫn. Nhưng cuối cùng bất cứ điều gì có thể được coi là một thiết lập trang web toàn cầu là okay. – mario

+0

Cảm ơn, Mario. Tôi đánh giá cao sự thấu hiểu. – Josh

6

Bạn có thể thiết lập các biến môi trường trong .htaccess (hoặc http.conf):

SetEnv foo bar 

và truy cập chúng trong PHP qua

$_ENV['foo'] 
3

nếu bạn muốn biến thể truy cập từ mảng $ _GET (điều này sẽ ghi đè bất kỳ biến nào đang được gửi đến máy chủ thông qua get)

RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^(.*)$ $1?%1&myvar=something 

% 1 bất cứ chuỗi truy vấn có thể là

+2

Bạn có thể muốn thêm 'RewriteCond% {QUERY_STRING}! Myvar' vào trước để ngăn chặn vòng lặp vô hạn. – Gerben

1

Tôi đang sử dụng biến môi trường để cho tôi biết những gì một phần của "5G Danh sách đen" tường lửa kịch bản http://perishablepress.com/5g-blacklist-2013/ được kích hoạt bởi một scumbag

Ví dụ, một phần của bức tường lửa dừng các chuỗi truy vấn spammer phổ biến nhất:

RewriteBase/
RewriteCond %{QUERY_STRING} (\"|%22).*(<|>|%3) [NC,OR] 
RewriteCond %{QUERY_STRING} (javascript:).*(\;) [NC,OR] 
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3) [NC,OR] 
RewriteCond %{QUERY_STRING} (\\|\.\./|`|=\'$|=%27$) [NC,OR] 
RewriteCond %{QUERY_STRING} (\;|\'|\"|%22).*(union|select|insert|drop|update|md5|benchmark|or|and|if) [NC,OR] 
RewriteCond %{QUERY_STRING} (base64_encode|localhost|mosconfig) [NC,OR] 
RewriteCond %{QUERY_STRING} (boot\.ini|echo.*kae|etc/passwd) [NC,OR] 
RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC] 
RewriteRule .* - [E=BadQueryString,F] 

Xem E = BadQueryString? Tôi đã thêm vào đó. Cú pháp của khóa học phải chính xác.

Sau đó, trong chương trình PHP của tôi để xử lý 403: Permission denied lỗi, tôi sử dụng nó theo cách này (chú ý này prepends máy chủ "REDIRECT_" vào tên biến môi trường):

if (getenv("REDIRECT_BadQueryString") !== FALSE) { 
    $htaccessErrors .= ' BadQueryString'; 
    if (getenv("REDIRECT_QUERY_STRING") !== FALSE) { 
    $htaccessErrors .= getenv("REDIRECT_QUERY_STRING"); 
    }  
} 

Dưới đây là một ví dụ .htaccess , kiểm tra biến máy chủ Tác nhân người dùng và sử dụng biến môi trường nếu biến được đặt và sau đó biến môi trường có sẵn trong 403.php

SetEnvIfNoCase User-Agent (binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|sucker|turnit|vikspider|zmeu) BadUserAgent 
<limit GET POST PUT> 
Order Allow,Deny 
Allow from all 
Deny from env=BadUserAgent 
</limit> 
Các vấn đề liên quan