このアドレスをnginxまたはApacheで書き直しました:
http://domain.com/hello
次のようなスクリプトに
http://domain.com/test.php&ref=hell
PHPでこの書き換えられたURLにアクセスするにはどうすればよいですか?もちろん、$_SERVER['REQUEST_URI']
を使用すると、次のようになります。
/test.php&ref=hell
しかし、私は欲しいだけです:
/hello
これは可能ですか?助けてくれてありがとう。
pd nginx cnf
proxy_redirect off;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
server
{
listen 80;
server_name domain.test;
location /
{
rewrite ^/(main|best|air)$ /core/feeds.php?act=$1 last;
proxy_pass http://127.0.0.1:8080;
}
}
Nginx
confで、request_uri
を使用してユーザーヘッダーを追加する必要があります。
proxy_set_header request_uri $request_uri;
そしてそれをphp
で読んでください:
echo $_SERVER['HTTP_REQUEST_URI'];
pd
何らかの理由で、nginxはヘッダー名の記号「_」が好きではありません。以前はどのように機能していたのかわかりません。nginxの更新後に何かが変更された可能性があります。今私は使用しています
proxy_set_header rewriteduri $request_uri;
とphpで
$_SERVER['HTTP_REWRITEDURI']
それは本当にPHPセットアップに依存します。mod_phpを使用すると、多くの場合、元のリクエストパスが_REQUEST_URI
_にあります。CGIまたはFastCGIセットアップの場合、それは非常に一般的に_REDIRECT_URL
_です。 phpinfo()
ページを確認する必要があります。
あなたが本当に役立つものを見つけることができないなら、それは不正行為の時間です!次のようにRewriteRuleを調整して、選択した環境変数に元のURLを保持できます。
_RewriteRule ^(\w+)$ test.php?ref=$1 [E=ORIG_URI:/$1]
_
これは_$_SERVER["ORIG_URI"]
_として利用可能になるか、$ _ GET ['ref']を使用してURIから取得できます。ただし、すべての潜在的なRewriteRulesでこのトリックを使用する必要があります。
通常、リクエストされたURLは次の場所にあります。
$_SERVER['REQUEST_URI']
$_SERVER['REDIRECT_URL']
(おそらくApacheのみ、nginxについては知らない)$_SERVER['REQUEST_URI']
には書き換えられたURLが含まれているとおっしゃっていましたが、私のすべてのテストでは、元のリクエストが含まれています。
$_SERVER
をダンプして、そこに何が入っているか見てみませんか。