2009-08-01 16 views
4

は、我々は次のPHP "のindex.php" のページがあるとしにApacheのmod_rewriteと%{REQUEST_URI}問題

RewriteRule ^2.php$ index.php?req=%{REQUEST_URI} 
RewriteRule ^1.php$ 2.php 

今、してみましょうアクセス "index.php"。これは次のとおりです。

/index.php 
null 

これはクールです。 "2.php"にアクセスしましょう。これを取得します:

/2.php 
/2.php 

それも素晴らしいです。しかし、今のは「1.php」を見てみましょう:

/1.php 
/2.php 

だから...私たちは「1.php」を求める、それは静かに静かに「index.phpにリダイレクトする「2.php」にリダイレクトします最初のリダイレクションの後にの後にを探しているページ)と$ _SERVER ['REQUEST_URI']のように見えますが、 "%REQUEST_URI" "1.php"(元の要求)です。

これらの変数は等しくないはずですか?これは、オリジナルのリクエストにのみ基づいてリダイレクトを実行しようとしていたため、今日私に多くの頭痛を与えました。リダイレクト後も元の要求を伝える ".htaccess"で使用できる変数はありますか?

ありがとうございました。私は自分自身を明確にしたいと思います。それは私の最初の投稿です:)

答えて

1

を。私は%{THE_REQUEST}変数を使用しました。これは基本的に "GET /123.php HTTP/1.1"のようなものです。リダイレクト後も変わりません。みんなあなたの助けをありがとう! :)

+0

'$ _SERVER ['REQUEST_URI']'を使わないのはなぜですか? – Gumbo

+0

PHPではなく、.htaccessで変数を使用する必要があります。最初の投稿で述べたように、%{REQUEST_URI}にはリダイレクト/リライト後の元のリクエストは含まれていません。 – liviucmg

4

私はそれがあなたのニーズを満たすかどうかは分かりませんが、REDIRECT_REQUEST_URIを最初に見てみると、そこになければREQUEST_URIです。グンボの答えにあなたのコメントで言及しているのは、あなたが本当に探しているのはオリジナルのURIです。 REDIRECT_*サーバ変数のバージョンは、Apacheがそのようなものを利用できるようにする方法です。

+0

残念ながら、[PT]修飾子を追加しても差はありません。 – liviucmg

2

ただ、ルールの順序を変更し、それが動作します:

RewriteRule ^1\.php$ 2.php 
RewriteRule ^2\.php$ index.php?req=%{REQUEST_URI} 

それとも、一つのルールを使用します。まあ、私は問題を解決したと思います

RewriteRule ^(1|2)\.php$ index.php?req=%{REQUEST_URI} 
+0

はい、1つ以上のリダイレクト後も元の要求を伝えることができる変数を探していましたが、私が掲載した例ではうまくいくと思います。 – liviucmg