Есть ли способ установить пользовательскую переменную из .htaccess
чтобы каждый PHP-скрипт мог читать из нее? Я никуда не искал.
Спасибо!
Вы можете установить только переменную среды из .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» 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>