新しい URL にロケールを追加する Apache RewriteRule エラー

新しい URL にロケールを追加する Apache RewriteRule エラー

URL をリダイレクトしている最中で、その際に「RewriteRule」ディレクティブを使用したいと考えていました。

現在、次のようなルールがあります。

 RewriteRule ^/application/web/reservation/index.jsp https://application.domain.com/application2/web/reservation/audioForm.zul [R,L]

ただし、最初の URL の末尾にロケールが追加された場合にも、これが機能するようにしたいと思います。ロケールはさまざまな異なるロケール (静的ではない) になる可能性があるため、RewriteRule で最初の URL の '.jsp' の後に続くものを取得し、2 番目の URL の '.zul' の後に配置するようにします。

たとえば次のようになります:

RewriteRule ^/application/web/reservation/index.jsp(*)$ https://application.domain.com/application2/web/reservation/audioForm.zul$1 [R,L]

置換部分の構文が間違っていると思います:

(*)$ and $1 respectively

ロケールでのリンクがどのように見えるかを確認できるように、以下に例を示します。

https://application.domain.com/application/web/reservation/index.jsp?locale=de-DE

2 番目の URL の .zul の後に '?locale=de-DE' を配置します。

何が間違っているのか誰か教えてもらえますか? どんな助けでも大歓迎です。

よろしくお願いします

答え1

実はあなた自身の答えは正しくありません。

特定の(ここでは具体的な単語が重要です)クエリ文字列例えば、あなたが言及した「?locale=de-DE'」のような場合、RewriteCondが必要している。

しかし、この特定のケースでは、ターゲット URL がクエリ文字列を指定していないため、QSD フラグ (クエリ文字列の破棄) を指定しない限り、mod_rewrite のデフォルトの動作では、元のクエリ文字列 (それが何であれ) がそれに追加されます。

つまり、簡単に言うと:

RewriteRule ^/application/web/reservation/index.jsp https://application.domain.com/application2/web/reservation/audioForm.zul [R,L]

あるいは:

RewriteRule ^/application/web/reservation/index.jsp$ https://application.domain.com/application2/web/reservation/audioForm.zul [R,L]


は、 "/application/web/reservation/index.jsp?whatever"というリクエストに一致
し、指定したターゲットに任意のクエリ文字列を追加します。
"https://application.domain.com/application2/web/reservation/audioForm.zulクエリ文字列を指定していないためです。

答え2

実際に、mod_rewrite API を数時間試して調査した後、私はそれを理解しました。

Apache モジュール mod_rewrite - Apache HTTP サーバー

の代わりに:

^/application/web/reservation/index.jsp(*)$

私が使用したのは:

^/application/web/reservation/index.jsp(.*)

関連情報