簡単なもの:
後者について次のことを考えると、$_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']
過去に頻繁に使用したことがなく、特定の脆弱性や使用上の矛盾があることを読んだことがあります。