web-dev-qa-db-ja.com

Apacheの書き換え-PHP

このアドレスを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;
  }
}
16
swamprunner7

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']
5
swamprunner7

それは本当に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でこのトリックを使用する必要があります。

12
mario

通常、リクエストされたURLは次の場所にあります。

  • $_SERVER['REQUEST_URI']
  • $_SERVER['REDIRECT_URL'](おそらくApacheのみ、nginxについては知らない)

$_SERVER['REQUEST_URI']には書き換えられたURLが含まれているとおっしゃっていましたが、私のすべてのテストでは、元のリクエストが含まれています。

$_SERVERをダンプして、そこに何が入っているか見てみませんか。

6
Phil