3

Webサービスのいくつかのメジャーバージョンとマイナーバージョンをサポートする必要があるため、次のようなURLでバージョンを使用することにします。

http:// service /#最後にデプロイされたバージョンのサービス
http:// service / 1 /#最後にデプロイされたメジャーバージョン1.xを指すシンボリックリンク
http://service/1.2/#最後にデプロイされたマイナーバージョン1.2.xを指すシンボリックリンク

すべてのタグをフォルダに保存し、正しいバージョンへのシンボリックリンクを作成します。

ここにapacheのルートディレクトリがあります:
lrwxr-xr-x 1 xxxx xxxx 28 May 23 15:21 1-> / home / site / tags / 20120523084844-HEAD
lrwxr-xr-x 1 xxxx xxxx 28 Apr 27 15:21 1.1-> / home / site / tags / 20120427152123-HEAD
lrwxr-xr-x 1 xxxx xxxx 28 May 23 08:48 1.2-> / home / site / tags / 20120523084844-HEAD
lrwxr-xr-x 1 xxxx xxxx 28 May 24 16:12 2-> / home / site / tags / 20120524161232-HEAD
(最後にデプロイされたバージョンのソースコードはこちら)
....。

PHPのREQUEST_URIにバージョンプレフィックスがあり、Symfonyルーターはそれをパターンと照合しないため、ここで問題が発生します。そのバージョンプレフィックスをカットしながら、特定のディレクトリをドキュメントルートとして使用するにはどうすればよいですか?

たとえば、http://service/1.2/some/handler/patternthenにリクエストを送信すると、1.2ディレクトリのコードが使用され、PHPのREQUEST_URIは/ some / handler/patternになります。

4

2 に答える 2

1

これは興味深い問題です。

少なくとも醜いハックなしでは、htaccessだけではできないと思います。REQUEST_URI は常に元のリクエストを保持します。私の知る限り、それを編集する方法はありません (E=REQUEST_URI="something" を介して変数 REQUEST_URI にコンテンツを割り当てようとすると、"REDIRECT_REQUEST_URI" という環境変数が作成されます)。 )。

私は Symfony に詳しくないので、ルーティングを処理するスクリプトを編集するのがどれほど簡単かはわかりません。簡単な場合は、次のようなことができます

RewriteRule ^[1-9.]/(.*)$ - [R,QSA,NC,E=HANDLER:$1]

次に、PHP でハンドラーを request_uri にコピーできます。

$_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_HANDLER'];

このように PHP を変更することは別として、私は次のことしか考えられません。最初にハンドラーにハード リダイレクトし、バージョン情報をクエリ文字列に入れます。次に、そのリクエストをキャッチし、バージョン/ハンドラーにソフト リダイレクトします。Request_uri は正しく設定されますが、見苦しく、エラーが発生しやすくなります。

そうは言っても、バージョニングにサブドメインを使用することについては、Gerben に完全に同意します。

于 2012-05-25T19:59:02.250 に答える
1

これを試して:

RewriteEngine On
RewriteBase /

RewriteCond $1 !^[0-9.]+/
RewriteRule ^(.*) /1.2/$1 [L]

唯一の考えは、一度にバージョンをテストすることしかできず、別のバージョンが必要な場合は htaccess を変更する必要があるということです。

バージョン管理にサブドメインを使用することをお勧めしますか?

于 2012-05-25T19:33:59.760 に答える