0

私はこれを理解しようとずっと努力してきました。これが繰り返しの質問である場合はお詫び申し上げますが、適切な解決策が見つからないようです。

私が達成しようとしていることは次のとおりです。

URLが与えられたdev-<sub>.example.com/resources/path/to/resource場合、それがファイルを生成するかどうかsubに移動します(404を処理できます)。/var/www/devEx_<sub>/override/resources/path/to/resource/var/www/devEx_<sub>/main/resources/path/to/resource

各個人を手動で追加するソリューションは理解subできますが、ワイルドカードまたは後方参照を使用してそれを行う方法を理解できません。

いじってみましたが、リソースをチェックするためにに表示される部分をVirtualDocumentRoot取得できません。devEx_<sub>DOCUMENT_ROOT

これに似たソリューションを使用してみました[ mod_rewriteregex(too many redirects) ]が、常に。を台無しにしREQUEST_URIます。

私は過去にこのようなものを使ってみました:

RewriteCond $1 (^resources/.*)
RewriteCond %{DOCUMENT_ROOT}/override%{REQUEST_URI} -f
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/override%{REQUEST_URI} [QSA,L]

RewriteCond $1 (^resources/.*)
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/main%{REQUEST_URI} [QSA,L]

また、Apache / Mod_rewriteの使用についてもっと理解したいので、これまたはいくつかのデバッグ手法で役立つ優れたテクニカルガイドまたはチュートリアルの提案がある場合(これらの書き換えルールをデバッグする方法がわからないため) 、知識をいただければ幸いですので、共有してください!

編集

私の試験についての詳細。

私のVirtualDocumentRootソリューションでは、適切なディレクトリにルーティングできましたが、オーバーライドルールを実行するためにディレクトリをドキュメントルートとして設定できませんでした。

このソリューション[ mod_rewriteregex(too many redirects) ]ではDocumentRoot、confのをに設定し、ディレクトリ内のファイルに/var/www次の行を配置しました.htaccess

RewriteCond %{HTTP_HOST} ^dev-([^.]+)\.example\.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/devEx_%1 -d
RewriteCond %{ENV:REDIRECT_STATUS}  =""
RewriteRule .* /devEx_%1/$0 [L]

ただし、ご想像のとおり、これはに追加さdevEx_<sub>%{REQUEST_URI}ます。

4

1 に答える 1

0

ドキュメントのルートを /var/www/ にしてみませんか

devExこれはおそらく、ディレクトリにないものによっては、再ルーティングする必要があるため、あなたがしようとしている最善の方法です。次のようなものが必要です。

RewriteCond $1 (^resources/.*)
RewriteCond %{HTTP_HOST} ^dev-(.*)\.example.com$ [NC]
RewriteCond %{DOCUMENT_ROOT}/devEx_%1/override%{REQUEST_URI} -f
RewriteRule ^(.*)$ /devEx_%1/override%{REQUEST_URI} [QSA,L]

RewriteCond $1 (^resources/.*)
RewriteCond %{HTTP_HOST} ^dev-(.*)\.example.com$ [NC]
RewriteRule ^(.*)$ /devEx_%1/main%{REQUEST_URI} [QSA,L]

%{DOCUMENT_ROOT}別の方法として、インスタンスをに置き換えることもできますが/var/www、特にサイトを別の場所に移動したり、サーバーの構成を変更したりする場合は、ややこしくなります。したがって、次のようなものが得られます。

RewriteCond $1 (^resources/.*)
RewriteCond %{HTTP_HOST} ^dev-(.*)\.example.com$ [NC]
RewriteCond /var/www/devEx_%1/override%{REQUEST_URI} -f
RewriteRule ^(.*)$ /var/www/devEx_%1/override%{REQUEST_URI} [QSA,L]

RewriteCond $1 (^resources/.*)
RewriteCond %{HTTP_HOST} ^dev-(.*)\.example.com$
RewriteRule ^(.*)$ /var/www/devEx_%1/main%{REQUEST_URI} [QSA,L]
于 2012-07-02T19:02:56.520 に答える