2

$_SERVER['REQUEST_URI'] が相対パスではなく完全な URL をスクリプトに返すため、PHP アプリが機能しません。

私の環境は
Windows7 64bit です。
XAMPP バージョン 1.8.2
PHP バージョン 5.4.16
Apache バージョン Apache/2.4.4 (Win32) OpenSSL/0.9.8y PHP/5.4.16

私の仮想ホスト会議:

<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 に設定しただけです。

なぜこれが起こるのかを知るために何時間も費やし、グーグルとこのウェブサイトを検索しましたが、手がかりが見つかりません.

何が悪いのか教えてください。

ありがとう。
イヴァン

4

3 に答える 3

3

仮想ホストを作成することで望ましい効果が得られていると思います。

仮想ホストなし:

/ivankristianto/request.php 

仮想ホストの場合:

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

http://www.ivankristianto.localhttp://www- これにはandが含まれているため、間違っているように思われると思います.local- これを just に変更するinvankristanoと、REQUEST_URI仮想ホストがない場合と同じように出力されます。これは、hosts ファイルで設定した request.php へのパスを表しているため、URI の有効な部分です。

基本的に私が言っていることは、何も間違っていないということです。

それが問題を引き起こしている場合、1 つの解決策は、現在の環境を特定することです。

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']);
}

アップデート

ホスト 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>

(ServerName から www. を削除)

于 2014-10-05T09:28:26.417 に答える