6

これは、を使用して var を設定できることを学習するこの質問の拡張です。$_SERVERSetEnv

次の質問は次のとおりです。本質的に次のように SetEnv を使用する方法はありますか。

/var/www/www.example.com/module/unique_section/.htaccess:

SetEnv RESOURCE_ROOT %{DIRECTORY}

/var/www/www.example.com/module/unique_section/some/path/file.php

<?php echo $_SERVER['RESOURCE_ROOT']; ?>

出力:/var/www/www.example.com/module/unique_section/

4

3 に答える 3

6

必要な情報によってRewriteRule. 例えば:

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT} (.*)
RewriteRule (.*) - [E=RESOURCE_ROOT:%1]

PHP変数$_SERVER['RESOURCE_ROOT']または$_SERVER['REDIRECT_RESOURCE_ROOT']Apacheドキュメントルートを設定します。完全な詳細については mod_rewrite のマニュアルを参照てください。%{DOCUMENT_ROOT}%{PATH_INFO}%{REQUEST_FILENAME}

ファイルがどのディレクトリにあるかをファイルが知ることはできないと思い.htaccessます。そのため、ファイル内でハードコードされたパスを使用する必要があると思い.htaccessます。例として:

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT} (.*)
RewriteRule (.*) - [E=RESOURCE_ROOT:%1/module/unique_section/]
于 2012-06-28T20:44:59.237 に答える
4

私の知る限り、setEnvはapache環境変数にアクセスできません。したがって、値を具体的に「%{DIRECTORY}」にする必要がない限り、%{DIRECTORY}は機能しません。mod_rewriteを使用すると、これはロードされているファイルのパスを取得するために機能しました。

RewriteEngine On

RewriteCond %{SCRIPT_FILENAME} ((.*)/)
RewriteRule (.*) - [E=RESOURCE_ROOT:%1]

出力:

var_dump(__FILE__);
//outputs: string(27) "/var/www/sub/test/index.php" 
var_dump($_SERVER['RESOURCE_ROOT']);
//outputs: string(24) "/var/www/sub/test/"

それ以外に、phpを使用して実行するだけで何か問題がありますdirname(__FILE__)dirname($_SERVER['PHP_SELF'])

于 2012-06-28T20:49:35.433 に答える
2

この関数apache_getenvを使用して、必要なものを取得できます。

リンク: http: //php.net/manual/en/function.apache-getenv.php

ドキュメントを読むことを忘れないでください:

この関数にはApache2が必要です。それ以外の場合は未定義です。

例 :

<?php
$ret = apache_getenv("SERVER_ADDR");
echo $ret;
?>

上記の例では、次のようなものが出力されます。

42.24.42.240

しかし、この脅威で示唆されているように、あなたはただ使用することができdirname(__FILE__)、PHP 5.3.0以降__DIR__、魔法の定数として使用することができます。

于 2012-06-28T20:53:23.233 に答える