2

rewrite.propertiesで書き換えルールをうまくいじることができました。

今、私はこのようにURLを書き換えたいと思います:

 https://localhost:8443/test/customer1/login.xhtml

 https://localhost:8443/test/login.xhtml?customer=customer1

したがって、次の書き換えルールを使用しますが、機能しません。

 RewriteRule ^/(.*)$/login\.xhtml /login.xhtml?customer=$1

残念ながら、うまくいきません。ページが見つかりません。誰にもアイデアはありますか?

そして、書き換え後に結果のURLをログに記録または表示する方法を知っていますか?

4

2 に答える 2

3

.properties ファイルを投稿していただけますか?

rewrite.propertiesの JBoss Webドキュメントは次のとおりです(他の参照用)。

それでも解決しない場合は、UrlRewriteFilterを試してください。

しかし、正規表現をよく見ると、その問題をもう少し勉強する必要があるようです。使用しないことをお勧めしcustomer1 but customer/1ます-スラッシュがないと、一般的に分割が難しくなります。ともかく:

RewriteRule ^/customer([0-9]+)/login\.xhtml /login.xhtml?customer=$1

ロギングに関して、バルブはこのコードを使用してログを記録しているようです:

295                   if (container.getLogger().isDebugEnabled()) {
296                       container.getLogger().debug("Rewrote " + test + " as " + newtest
297                               + " with rule pattern " + rules[i].getPatternString());

したがって、おそらく全体org.jboss.webまたはorg.apache.catalinaデバッグに設定すると、そのメッセージが表示されます。次に、チェックしstandalone/log/server.logます。

更新:質問者は "customer1" を "customer=1" に解析したいと考えていました。彼はパスセグメントを移動したいだけであることが判明しました...

だから、私は試してみます:

RewriteRule ^/([^/]+)/login\.xhtml /login.xhtml?customer=$1

つまり、コンテキスト ルートから最初の/エクスクルーシブまですべてを取得します。

于 2013-06-25T02:23:36.550 に答える
2

RewriteLogディレクティブを使用して、何が起こっているかを確認できるはずです。

ただし、書き換えルールを見ると、何が問題なのかがわかります。

RewriteRule ^/(.*)$/login\.xhtml /login.xhtml?customer=$1

まず、文字列の途中にあるため、このルールは一致しないはず$です。これは、要求文字列の末尾をマークする必要があります。それ以降はすべて無関係です。それを取り出しましょう:

RewriteRule ^/(.*)/login\.xhtml /login.xhtml?customer=$1

このルールを に適用するhttps://localhost:8443/test/customer1/login.xhtmlと にリダイレクトされますがhttps://localhost:8443/login.xhtml?customer=test/customer1、これはあなたが望んでいたものではありません。私の推測では/test/、パスの一部を考慮する必要があります。必要な出力を得るには、これを試してください:

RewriteRule ^/test/(.*)/login\.xhtml /test/login.xhtml?customer=$1
于 2013-06-27T13:36:16.313 に答える