3

問題

いくつかの短い便利なURLをより長い実際のURLにリダイレクトする必要があります。問題のサイトは、一連のサブドメインを使用して、一連の開発バージョンまたはライブバージョンを識別します。

特定のリクエストのリダイレクト先のURLにHTTP_HOSTを含めて、ホストごとにカスタムの.htaccessファイルを作成する必要がないようにしたいと思います。

ホスト固有の例(.htaccessファイルから抜粋)

Redirect /terms http://support.dev01.example.com/articles/terms/

この例は、dev01.example.comで実行されている開発バージョンで正常に機能します。dev02.example.comで実行されている開発バージョンのメインの.htaccessファイルで同じ行を使用すると、間違った場所にリダイレクトされることになります。

理想的なルール(正しい構文がわからない)

Redirect /terms http://support.{HTTP_HOST}/articles/terms/

このルールは機能せず、私が達成したいことの例としてのみ機能します。次に、多くの異なるホストでまったく同じルールを使用して、正しい結果を得ることができます。

答え?

  • これはmod_aliasで実行できますか、それともより複雑なmod_rewriteが必要ですか?
  • これは、mod_aliasまたはmod_rewriteを使用してどのように実現できますか?可能であれば、mod_aliasソリューションをお勧めします。

明確化

私は同じサーバーにとどまりません。私は…したい:

example.comとdev.example.comの両方の.htaccessファイルで同じルールを使用できるようにしたいと思います。この状況では、リクエストのリダイレクト先のURLで文字通り指定するのではなく、HTTP_HOSTを変数として参照できるようにする必要があります。

提案されているようにHTTP_HOSTパラメーターを調査しますが、実際の例を期待していました。

4

7 に答える 7

3

誰も実際の答えを出していないのは不思議です笑):

RewriteCond %{HTTP_HOST} support\.(([^\.]+))\.example\.com
RewriteRule ^/terms http://support.%1/article/terms [NC,QSA,R]

あなたがより速く仕事をするのを助けるために、正規表現をチェックするための私のお気に入りのツール:

http://www.quanetic.com/Regex(preg(PCRE)の代わりにereg(POSIX)を選択することを忘れないでください!)

このツールは、URLをチェックして、それらが有効かどうかを確認する場合に使用します。

于 2012-04-05T07:35:56.010 に答える
0

HTTP_HOST値をキャプチャして、それを書き換えルールで使用することをお勧めします。

RewriteCond %{HTTP_HOST} (.*)
RewriteRule ^/terms http://support.%1/article/terms [NC,R=302]
于 2008-09-16T14:21:18.530 に答える
0

私があなたの質問を正しく理解していれば、301 リダイレクトが必要です (ブラウザーに他の URL に移動するように指示します)。私の解決策が適切でない場合は、次のツールを試してください: http://www.htaccessredirect.net/index.phpを試して、何がうまくいくかを判断してください。

//301 Redirect Entire Directory
RedirectMatch 301 /terms(.*) /articles/terms/$1

//Change default directory page
DirectoryIndex 
于 2012-04-04T11:25:41.403 に答える
-1

同じサーバーにとどまっている場合、これを .htaccess に入れると、サーバーに関係なく機能します。

RedirectMatch 301 ^/terms$ /articles/terms/

プロデュース:

http://example.com/terms -> http://example.com/articles/terms

また:

http://test.example.com/terms -> http://test.example.com/articles/terms

明らかに、REGEX マッチングなどを調整して、投げよう​​としているものに対応できるようにする必要があります。301 についても同様です。ブラウザにリダイレクトをキャッシュさせたくない場合は、302 が必要になる場合があります。

お望みならば:

http://example.com/terms -> http://server02.example.com/articles/terms

次に、HTTP_HOST パラメーターを使用する必要があります。

于 2008-09-16T14:02:39.667 に答える
-1

このチートシート ( http://www.addedbytes.com/download/mod_rewrite-cheat-sheet-v2/png/ ) によると、これは機能するはずです

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain2.com/$1

これをテストする方法がないことに注意してください。これは、明示的な回答ではなく、正しい方向へのポインターと見なす必要があります。

于 2008-09-16T13:56:59.743 に答える
-2

本当に必要なのは単なるエイリアスのように聞こえますか?

Alias /terms /www/public/articles/terms/
于 2008-09-16T14:12:28.647 に答える
-2

この情報を含める必要はありません。ルートからの相対 URI を指定するだけです。

Redirect temp /terms /articles/terms/

これはmod_alias のドキュメントで説明されています:

新しい URL は、スキームとホスト名で始まる絶対 URL である必要がありますが、スラッシュで始まる URL パスも使用できます。その場合、現在のサーバーのスキームとホスト名が追加されます。

于 2008-09-16T14:06:42.340 に答える