0

基本的には、サイト移行の作業で複数のリダイレクトを配置しています。ただし、私の職場では、テスト/開発/運用用に複数のサーバーがあります。通常、ドメインは次のようにマッピングされます。

http://<accountname>.(test|dev|).<maindomain>.edu.au

内部リダイレクトの場合、適切なサーバーへの参照を維持することに問題はありません。ただし、サイト上の別のアカウントへの移行を実行すると、リダイレクトが適切なサーバーにとどまるようにすることが少し難しくなります。

たとえば、「foobar」という会社の「foo」アカウントを「bar」にリダイレクトすることにしたとします。

Foo's production URL:  http://foo.foobar.edu.au
Foo's test URL:        http://foo.test.foobar.edu.au
Foo's development URL: http://foo.dev.foobar.edu.au

Bar's production URL:  http://bar.foobar.edu.au
Bar's test URL:        http://bar.test.foobar.edu.au
Bar's development URL: http://bar.dev.foobar.edu.au

基本的に、へのすべてのリクエストがのドメインfooに適切にマップされるように、htaccess ファイルを作成する必要があります。bartest/dev/production

現時点でこれを達成した方法は、RewriteCond を使用して、リダイレクト用のサーバー情報の一部を取得することです。

RewriteCond %{SERVER_NAME} ^foo(\.test|\.dev|\.)foobar.edu.au
    RewriteRule ^(.*)$ http://bar%1foobar.edu.au/$1

これは、一括リダイレクトでうまく機能します。ただし、もう少し工夫する必要がある場合 (つまり、すべてのfooのディレクトリがまったく同じパスに一致するわけではなく、個々のリダイレクトが必要な場合)、新しいbarものごとに同じものをコピーする必要があることがわかります(に適用できないため)複数のデータをキャプチャしながら。RewriteCondRewriteRuleRewriteCondRewriteRule

例えば:

# resources/data has been duplicated on bar
RewriteCond %{SERVER_NAME} ^foo(\.test\.|\.dev\.|\.)foobar.edu.au
    RewriteRule ^(resources/data/.+)$ http://bar%1foobar.edu.au/$1 [R=301,L]
# the rest of foo just points to a static page on bar
RewriteCond %{SERVER_NAME} ^foo(\.test\.|\.dev\.|\.)foobar.edu.au
    RewriteRule ^ http://bar%1foobar.edu.au/migration/foo.cfm [R=301,L]
# there are actually more, but removed for brevity

TL;DR変数
のセクションをキャプチャし、それを複数の 's 全体で使用する簡単な方法はありますか?SERVER_PATHRewriteRule

私は mod_rewrite の初心者なので、助けていただければ幸いです。

ありがとう、
J

4

1 に答える 1

0

SERVER_PATH 変数のセクションをキャプチャして、複数の RewriteRule で使用する簡単な方法はありますか?

一致を複製し、使用する必要があるたびに後方参照を使用する以外に方法はないと思います。ただし、これを に渡した場合、これは少し簡単になるRewriteMapでしょうか?

おそらく次のようなものです(これは仮想ホストまたはサーバー構成にある必要があります):

RewriteMap mymap prg:/path/to/my/mapping/script.sh

次に、htaccess で次のように呼び出すことができます。

RewriteRule ^(.*)$ ${mymap:%{SERVER_NAME}%{REQUEST_URI}|$1} [L]

したがって、script.sh は%{SERVER_NAME}%{REQUEST_URI}(理論的には : のようなものになりますfoo.test.foobar.edu.au/some/path/to/file.html) を取得し、どこに移動する必要があるかを把握する必要があります。ブラウザをリダイレクトする必要がある場合は、で始まる結果を出力しますhttp://。そうしないと、内部的に書き換えられます。

于 2012-08-09T04:05:17.210 に答える