Как настроить пользовательский глобальный из .htaccess

Есть ли способ установить пользовательскую переменную из .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>