Có cách nào để đặt biến tùy chỉnh từ trong .htaccess
sao cho mỗi tập lệnh php có thể đọc từ đó? Tôi đã googling xung quanh không có gì.Làm thế nào để thiết lập toàn cầu tùy chỉnh từ .htaccess
Thankyou!
Có cách nào để đặt biến tùy chỉnh từ trong .htaccess
sao cho mỗi tập lệnh php có thể đọc từ đó? Tôi đã googling xung quanh không có gì.Làm thế nào để thiết lập toàn cầu tùy chỉnh từ .htaccess
Thankyou!
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 đó.)
Làm thế nào về việc sử dụng một cái gì đó giống như mod_setenvif? Chi tiết bổ sung có sẵn tại http://httpd.apache.org/docs/current/env.html.
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']
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à
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
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>
+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
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
Cảm ơn, Mario. Tôi đánh giá cao sự thấu hiểu. – Josh