Как передать REQUEST_URI из htaccess в PHP - PullRequest
0 голосов
/ 21 декабря 2018

Я настраиваю URL-адрес перенаправления, где передается REQUEST_URI из .htaccess в файл PHP.

Вот моя структура файлов:

  • index.php
  • .htaccess
  • folder/index.php

Если URL-адрес http://example.com/?something

Я хочу передать %{REQUEST_URI} полный URL-адрес с .htaccess до folder/index.php и получить его с помощью $_SERVER['REQUEST_URI'].

My folder/index.php:

echo $_SERVER['REQUEST_URI'];

.htaccess:

ОБНОВЛЕНО:

Options +FollowSymLinks -MultiViews
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^(.*)$
    RewriteCond %{REQUEST_URI} !/folder/index.php$
    RewriteRule .* /folder/index.php [L,NE]
</IfModule>

Я ожидаю эхо REQUEST_URI в файле PHP, но всегда выдаю внешний сервер.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Я хочу передать %{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'] для доступа к строке запроса (строка для перенаправления).

0 голосов
/ 21 декабря 2018

Используйте переменную среды.

.htaccess
SetEnv RURI %{REQUEST_URI}
index.php
<?php $requestURI = getenv('RURI'); ?>

Установите переменную среды в .htaccess и получите ее в PHP

Убедитесь, что mod_env включен в Apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...