2

簡単なもの:

後者について次のことを考えると、$_SERVER['REQUEST_URI']とは異なる値が含まれる特定の状況を誰かが知っているかどうか興味があります。$_GET['_uri'].htaccess

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ?_uri=$1 [L,QSA]

私は後者の方法を使用してきましたが、それでも必要で$_GET['_uri']あることは承知してmod_rewriteいますが、URI をクエリ パラメータとして保存することは避けたいと考えています。


さて、今まで気付かなかったものを見つけました。転送先のアプリケーション ブートストラップがmod_rewriteルート Web ディレクトリにない場合$_SERVER['REQUEST_URI']、親ディレクトリは$_GET['_uri']含まれますが、後者の URI コンポーネントのみが含まれます。例:

ブートストラップが リクエスト中です/subdir/index.php
http://localhost/subdir/foo/bar/baz/

$_SERVER['REQUEST_URI']  "/subdir/foo/bar/baz/"
$_GET['_uri']            "foo/bar/baz/"

の結果を複製するために$_GET['_uri']、これを使用することにしました。

$prefix = trim(dirname(strtr($_SERVER['PHP_SELF'], '\\', '/')), '/') . '/';
$uri = trim($_SERVER['REQUEST_URI'], '/') . '/';
if(substr($uri, 0, strlen($prefix)) == $prefix){
    $uri = substr($uri, strlen($prefix));
}

しかし、私は$_SERVER['PHP_SELF']過去に頻繁に使用したことがなく、特定の脆弱性や使用上の矛盾があることを読んだことがあります。

4

1 に答える 1

3
http://example.com/meow?param=value&_uri=hihihi
  • 期待される$_GET['_uri']結果:meow
  • 実結果:hihihi
  • $_SERVER['REQUEST_URI']価値:/meow?param=value&_uri=hihihi
  • $_SERVER['REDIRECT_URL']価値:/meow

すべては[QSA]旗のせい。

代わりに$_SERVER['REQUEST_URI']and/orを使用してください。$_SERVER['REDIRECT_URL']

上記はApacheの場合です。IIS 7.x では、少し異なる場合があります。

于 2011-07-05T23:57:11.577 に答える