
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(.*)