$ _SERVER [‘REQUEST_URI’] возвращает полный URL вместо пути к скрипту

Мое приложение PHP не работает, потому что $ _SERVER [‘REQUEST_URI’] возвращает полный URL-адрес скрипта вместо относительного пути.

Моя среда:
Windows 7 64 бит.
XAMPP версия 1.8.2
Версия PHP 5.4.16
Версия Apache Apache / 2.4.4 (Win32) OpenSSL / 0.9.8y PHP / 5.4.16

Мой виртуальный хост Conf:

<VirtualHost *:80>
DocumentRoot "D:/HTDOCS/ivankristianto"ServerName www.ivankristianto.local
UseCanonicalName Off
<Directory "D:/HTDOCS/ivankristianto">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
</VirtualHost>

Я создал базовый скрипт для проверки содержимого $ _SERVER:

echo '$_SERVER[\'HTTP_HOST\'] : ' . $_SERVER['HTTP_HOST'];
echo '<br/>' . '$_SERVER[\'PHP_SELF\'] : ' . $_SERVER['PHP_SELF'];
echo '<br/>' . '$_SERVER[\'REQUEST_URI\'] : ' . $_SERVER['REQUEST_URI'];

И вот результат:

// URL: http://localhost/ivankristianto/request.php
$_SERVER['HTTP_HOST'] : localhost
$_SERVER['PHP_SELF'] : /ivankristianto/request.php
$_SERVER['REQUEST_URI'] : /ivankristianto/request.php //This is correct

А также

// URL: http://www.ivankristianto.local/request.php
$_SERVER['HTTP_HOST'] : www.ivankristianto.local
$_SERVER['PHP_SELF'] : /request.php
$_SERVER['REQUEST_URI'] : http://www.ivankristianto.local/request.php  //This is wrong

Я не использовал прокси-сервер, все, что я делал, это просто устанавливал его в моем / etc / hosts.

Я потратил часы, чтобы выяснить, почему это происходит, и провел поиск в Google и на этом сайте, но не могу найти никакой подсказки.

Можете ли вы указать мне, что не так?

Благодарю.
Иван

1

Решение

Я считаю, что вы получаете желаемый эффект от создания виртуального хоста:

нет Виртуальный хост:

/ivankristianto/request.php

С Виртуальный хост:

http://www.ivankristianto.local/request.php

http://www.ivankristianto.local — Я думаю, что это кажется вам неправильным, потому что оно содержит http://www а также .local — вы можете изменить это просто invankristano и ваш REQUEST_URI будет выводить так же, как если бы у вас не было виртуального хоста. Он представляет путь к вашему request.php, который вы указали в файле hosts и поэтому является допустимой частью URI.

Так что в основном я говорю, что в этом нет ничего плохого.

Если это вызывает у вас проблемы, то одним из решений было бы определить, в какой среде вы находитесь, например

if($_SERVER['HTTP_HOST'] == 'www.ivankristianto.local') {
$dev_env = TRUE;
}else {
$dev_env = FALSE;
}

тогда где-то используйте это:

if($dev_env) {
$_SERVER['REQUEST_URI'] = str_replace($_SERVER['HTTP_HOST'],'',$_SERVER['REQUEST_URI']);
}

Обновить

попробуйте изменить host conf на:

<VirtualHost *:80>
DocumentRoot "D:/HTDOCS/ivankristianto"ServerName ivankristianto.local
UseCanonicalName Off
<Directory "D:/HTDOCS/ivankristianto">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Require all granted
</Directory>
</VirtualHost>

(удалите www. из ServerName)

3

Другие решения

Я наконец получил это работающим.
Вот шаги, которые я сделал (я не знаю, почему это происходит, но сейчас это работает).

  1. Установите PHP Fastcgi на xampp, я следую за этими шагами: https://commaster.net/content/installing-php-fastcgi-and-zend-opcache-xampp-windows
  2. Я загружаю mod_fcgid, но я не использую обработчик php-cgi.exe
  3. Обновите мой файл / etc / hosts и удалите dns этой командой ipconfig / flushdns
  4. Перезапустите Apache

И это работает как-то.
Честно говоря, я не знаю, почему это работает, но если кто-то наткнется на ту же проблему, я надеюсь, что решение может помочь.

0

Была такая же проблема в последнее время,
Мое решение:
Во-первых, проверьте, если ваш HTTP: // локальный имеет тот же эффект. (что я вижу, я не сделал)

Если нет, то добавьте ваш виртуальный хост (домены) в файл / etc / host.

Надеюсь, это полезно.

0
По вопросам рекламы [email protected]