Intereting Posts
Код возвращает последнее значение перед последним обновлением вместо последнего введенного значения? Программирование сокетов с использованием android и php php сравнить два вложенных массива и предсказать разницу Сохранение пути к базе данных / SQL тип контента 'text / xml; charset = utf-8 'не был ожидаемым типом' application / soap + xml; кодировка = UTF-8' Предупреждение: mysqli_real_escape_string () ожидает ровно 2 параметра, 1 из них … что я делаю неправильно? Разница между sleep () и usleep () в PHP PHP New Line не будет работать Почему вы не должны использовать mysql_fetch_assoc более 1 раза? php – это скомпилированный язык или интерпретируемый язык? Можно ли настроить содержимое cookie с помощью CURL? Платежи PayPal нескольким получателям. Адаптивные платежи? Что делает функция WordPress «_e ()»? Выберите строки из таблицы MySQL, где временная метка PHP старше X После добавления записи он не сразу отображает данные в представлении

Что может заставить переменные PHP быть перезаписаны сервером?

Мне была предоставлена ​​виртуальная машина в моей компании для установки веб-программного обеспечения. Но я столкнулся с довольно странной проблемой, когда переменные PHP будут перезаписаны (переписаны) сервером, если они соответствуют определенному шаблону. Что можно переписать переменные PHP, как это?

Ниже приведен полный сценарий.

<?php $foo = 'b.domain.com'; echo $foo; // 'dev01.sandbox.b.domain.com' $bar = 'dev01.sandbox.domain.com'; echo $bar; // 'dev01.sandbox.sandbox.domain.com' $var = 'b.domainfoo.com'; echo $var; // 'b.domainfoo.com' (not overwritten because it didn't match whatever RegEx has been set) ?> 

По существу, любая переменная, которая содержит субдомен и совпадает с именем домена, будет переписана. Это не то, что mod_rewrite мог бы коснуться, поэтому он должен быть чем-то на уровне сервера, который разбирает PHP и переписывает строку, если она соответствует RegEx.

Related of "Что может заставить переменные PHP быть перезаписаны сервером?"

В Apache можно выполнить перезапись вывода, используя mod_perl: PerlOutputFilterHandler.

Для установки фильтра вывода можно добавить в apache.conf следующее:

 <FilesMatch "\.(html?|php|xml|css)$"> PerlSetVar Filter On PerlHandler MyApache2::FilterDomain PerlOutputFilterHandler MyApache2::FilterDomain </FilesMatch> 

Пример кода обработчика фильтра:

 #file:MyApache2/FilterDomain.pm #-------------------------------- package MyApache2::FilterDomain; use strict; use warnings; use Apache2::Filter(); use Apache2::RequestRec(); use APR::Table(); use Apache2::Const -compile => qw(OK); use constant BUFF_LEN => 1024; sub handler { my $f = shift; my @hostname = split(/\./, $f->r->hostname); my $new_hostname = $hostname[0].".".$hostname[1]; unless ($f->ctx) { $f->r->headers_out->unset('Content-Length'); $f->ctx(1); } while ($f->read(my $buffer, BUFF_LEN)) { $buffer =~ s/([a-z0-9]+)+\.domain\./$new_hostname\.$1.domain\./g; $f->print($buffer); } return Apache2::Const::OK; } 1; с #file:MyApache2/FilterDomain.pm #-------------------------------- package MyApache2::FilterDomain; use strict; use warnings; use Apache2::Filter(); use Apache2::RequestRec(); use APR::Table(); use Apache2::Const -compile => qw(OK); use constant BUFF_LEN => 1024; sub handler { my $f = shift; my @hostname = split(/\./, $f->r->hostname); my $new_hostname = $hostname[0].".".$hostname[1]; unless ($f->ctx) { $f->r->headers_out->unset('Content-Length'); $f->ctx(1); } while ($f->read(my $buffer, BUFF_LEN)) { $buffer =~ s/([a-z0-9]+)+\.domain\./$new_hostname\.$1.domain\./g; $f->print($buffer); } return Apache2::Const::OK; } 1; 

Подробнее о фильтрах Apache mod_perl можно найти здесь: mod_perl: Фильтры ввода и вывода