Мое приложение 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 и на этом сайте, но не могу найти никакой подсказки.
Можете ли вы указать мне, что не так?
Благодарю.
Иван
Я считаю, что вы получаете желаемый эффект от создания виртуального хоста:
нет Виртуальный хост:
/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)
Я наконец получил это работающим.
Вот шаги, которые я сделал (я не знаю, почему это происходит, но сейчас это работает).
И это работает как-то.
Честно говоря, я не знаю, почему это работает, но если кто-то наткнется на ту же проблему, я надеюсь, что решение может помочь.
Была такая же проблема в последнее время,
Мое решение:
Во-первых, проверьте, если ваш HTTP: // локальный имеет тот же эффект. (что я вижу, я не сделал)
Если нет, то добавьте ваш виртуальный хост (домены) в файл / etc / host.
Надеюсь, это полезно.