Есть ли способ установить пользовательскую переменную из .htaccess
, чтобы каждый PHP скрипт мог читать из нее? Я не искал ничего.
Thankyou!
Есть ли способ установить пользовательскую переменную из .htaccess
, чтобы каждый PHP скрипт мог читать из нее? Я не искал ничего.
Thankyou!
Вы можете установить только переменную среды из .htaccess:
SetEnv MYVAR whatever
И это становится доступным в массиве $_SERVER
:
print $_SERVER["MYVAR"];
Итак, не совсем глобальная переменная. Но все же полезно для некоторых целей.
(Другая опция объявляет auto_prepend_file
, чтобы предварительно определить переменные, но это более обходное решение тогда.)
Вы можете установить переменные среды в .htaccess
(или http.conf
):
SetEnv foo bar
и получить доступ к ним через PHP через
$_ENV['foo']
если вы хотите, чтобы переменная была доступна из массива $_GET (это перезапишет любую переменную, отправляемую на сервер через get)
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*)$ $1?%1&myvar=something
% 1 вся строка запроса может быть
Как использовать mod_setenvif? Дополнительная информация доступна на http://httpd.apache.org/docs/current/env.html.
Я использую переменные среды, чтобы сообщить мне, какая часть брандмауэра "5G Blacklist" script http://perishablepress.com/5g-blacklist-2013/ запускается с помощью отморозка
Например, одна часть брандмауэра останавливает наиболее распространенные строки запросов спамера:
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]
Посмотрите, что E = BadQueryString? Я добавил это. Конечно, синтаксис должен быть точным.
Затем в моей PHP-программе для обработки 403: Разрешения на отказ от прав, я использую их таким образом (обратите внимание, что этот сервер добавляет "REDIRECT_" к имени переменной среды):
if (getenv("REDIRECT_BadQueryString") !== FALSE) {
$htaccessErrors .= ' BadQueryString';
if (getenv("REDIRECT_QUERY_STRING") !== FALSE) {
$htaccessErrors .= getenv("REDIRECT_QUERY_STRING");
}
}
Вот еще один пример .htaccess, проверяющий переменную сервера User-Agent и использование переменной среды, если она была установлена, а затем переменная среды доступна в моем файле 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>