0

すべてのリクエストをキャッチし、すべての POST データをそのままにして、キャッチオール ページに内部的に転送したいだけです。

キャッチオールページ: http://www.mydomain.com/addons/redirect/catch-all.php

非常に多くの組み合わせを試しましたが、catch-all.php 以上を指定すると、サーバーは内部的にリダイレクトしたくありません。

# Internally redirect all pages to "Catch" page
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) /addons/redirect/catch-all.php [L]

また、[L] は必要ですか、それとも内部リダイレクトには役に立ちませんか?

次に、どの php コードを使用して POST データを取得し、それを使用し、最後に PHP がページを最初に要求されたページにリダイレクトしますか?

$_POST['variable_name']; を使用して通常どおりに実行できますか? または何か違う?次に、最初に要求されたページをどのように呼び出して、ヘッダーの場所にそのページに誘導するように PHP に指示できますか?

ありがとう!

アップデート:

うんうん、気にしないで。条件は機能します。これが私のコードです:

# Internally redirect all pages to "Catch" page
Options +FollowSymLinks
RewriteEngine on

RewriteCond %{REQUEST_URI} !^/robots.txt$ 
RewriteCond %{REQUEST_URI} !\.(gif¦jpe?g¦png¦css¦js¦pdf¦doc¦xml)$

RewriteCond %{REQUEST_URI} !^/addons/redirect/catch-all\.php$
RewriteRule (.*)$ /addons/redirect/catch-all.php?q=$1 [L]

インスピレーションをありがとう!それでは、その PHP を機能させる時が来ました...

4

2 に答える 2

0

L は最後、またはここで停止します。大丈夫だよ。

# Internally redirect all pages to "Catch" page
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) /addons/redirect/catch-all.php?q=$1 [L]

これにより、元の場所が $_GET['q'] として保存されます

$_POST を通常どおり処理し、何も出力しないように注意してから、次のようにします。

header('Location: ' . $_GET['q'],true,302);

302 は一時的なリダイレクトを意味します。

テストはしていませんが、ログインのリダイレクトに似たようなことをしています。

EDIT:うーん..そのままループが発生します。ユーザーを既にリダイレクトしたことを知るには、他の RewriteRule が必要です。おそらく、元の URL に ?q=redirected を追加し、それを別の RewriteRule の停止として使用しますか?

違いを伝えるために、Web ルートへのシンボリック リンクを使用することもできると思います。

/var/www/html/blah は /var/www/html にリンクされています

次に、投稿をキャッチした後、代わりにすべてのユーザーを /blah に送信します。同じコンテンツ、2 つのパス、1 つは直接アクセス可能、もう 1 つはキャッチオールを通じてのみアクセス可能。

于 2009-10-14T00:43:47.053 に答える
0

あなたが持っているものは、画像と .js ファイルのリクエストもリダイレクトすると思います。また、どんな PHPheader()リダイレクトも、RewriteRule に再び突っ込みますね。要求されたページを実行する前に各ページで何らかのコードを処理する必要があり、要求されたページが実際に存在する場合、すべてのページにヘッダー ファイルを含めるだけではどうですか? 次に、ヘッダー ファイルに、実行するキャッチオール コード (またはそのための include()) を含めることができます。RewriteRule は必要ありません。

于 2009-10-14T00:29:55.350 に答える