Как установить пользовательский глобал из .htaccess - PullRequest
12 голосов
/ 09 января 2012

Есть ли способ установить пользовательскую переменную из .htaccess, чтобы каждый сценарий php мог читать из нее? Я гулял вокруг ничего.

Thankyou!

Ответы [ 5 ]

29 голосов
/ 09 января 2012

Вы можете установить переменную окружения только из .htaccess:

SetEnv MYVAR whatever

И это станет доступно в массиве $_SERVER:

print $_SERVER["MYVAR"];

Такне совсем глобальная переменная.Но все еще полезно для некоторых целей.

(Другой вариант - объявить auto_prepend_file для предопределения переменных. Но это скорее обходной путь.)

6 голосов
/ 09 января 2012

Вы можете установить переменные окружения в .htaccess (или http.conf):

SetEnv foo bar

и получить к ним доступ в PHP через

$_ENV['foo']
3 голосов
/ 09 января 2012

, если вы хотите, чтобы переменная была доступна из массива $ _GET (это перезапишет любую переменную, отправленную на сервер через get)

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

% 1, какой бы ни была строка запроса

2 голосов
/ 09 января 2012

Как насчет использования чего-то вроде mod_setenvif ?Дополнительная информация доступна на http://httpd.apache.org/docs/current/env.html.

1 голос
/ 15 августа 2013

Я использую переменные среды, чтобы сообщить мне, какая часть сценария брандмауэра "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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...