Я хочу передать %{REQUEST_URI}
полный URL-адрес от .htaccess
до folder/index.php
и получить его с помощью $_SERVER['REQUEST_URI']
.
Вы не можете этого сделать (но яне думайте, что это то, что вы пытаетесь сделать - или даже хотите сделать - в любом случае).Чтобы уточнить ...
Суперглобальный PHP $_SERVER['REQUEST_URI']
заполняется PHP, и его нельзя переопределить.
Пока %{REQUEST_URI}
(серверная переменная Apache ) и$_SERVER['REQUEST_URI']
(суперглобальный PHP) похож , они ссылаются на разные значения:
%{REQUEST_URI}
(серверная переменная Apache) - ссылается только на URL-путь (нет строки запроса).Значение указывается в%.Если запрос переписан, то он обновляется и содержит переписанный URL, а не URL исходного запроса.
$_SERVER['REQUEST_URI']
(PHP superglobal) - содержит начальный URL-путь и строка запроса, запрошенная пользователем (не переписанный URL).Значение не кодируется в%.
Если вы действительно хотите ссылаться на серверную переменную Apache REQUEST_URI
в PHP, вам нужно явно передать ее (возможно, как переменную среды илистрока запроса) - но в зависимости от , когда вы «пропустите», вы можете в конечном итоге передать разные значения.И в любом случае, это не изменит значение $_SERVER['REQUEST_URI']
, которое, как упоминалось выше, контролируется PHP.
Например:
RewriteRule ^ - [E=APACHE_REQUEST_URI:%{REQUEST_URI}]
И ссылаться на это в PHP какgetenv('APACHE_REQUEST_URI')
.
ОБНОВЛЕНИЕ:
По звукам этого вы, вероятно, хотите что-то вроде следующего:
RewriteCond %{QUERY_STRING} .
RewriteRule ^(index\.php)?$ folder/index.php [L,NE]
Это внутренне переписывает любой запрос корня документа, который содержит строку запроса (все после ?
) в /folder/index.php
.Если строка запроса отсутствует, то index.php
в корне документа обслуживается как обычно.
Затем в /folder/index.php
вы просто получаете доступ к $_SERVER['QUERY_STRING']
для доступа к строке запроса (строка для перенаправления).