0

私はApacheの背後でTomcatを実行しています。URLからパラメータ名を削除して、わかりやすいURLを適用する必要があります。私が欲しい

http://<domainname>/<APPLICATION>/QWERTY

これらは内部的に次のように動作するはずです

http://<domainname>/<APPLICATION>/vid=QWERTY

したがって、Tomcat では vid の値を取得し、それに応じてリクエストを処理できます

このために私は試しました、

<IfModule rewrite_module>
 RewriteEngine On    
   RewriteCond %{QUERY_STRING} !vid=(.*)$ [NC] 
   RewriteCond %{REQUEST_URI} !/assets/$ [NC]   
   RewriteRule ^/APPLICATION/(.*)$ /APPLICATION/?vid=$1 [R=301,L]    
</IfModule>

これを適用することで、私が与えたときにアプリケーションが動作しますhttp://<domainname>/<APPLICATION>/QWERTYが、ブラウザの URL バーでは URL が次のように変更されますhttp://<domainname>/<APPLICATION>/vid=QWERTY

http://<domainname>/<APPLICATION>/QWERTYもブラウザのアドレスにいる必要があります。

更新: 「Jacek_FH」の回答により、ルールを更新しました[削除済みR=301]

   RewriteCond %{QUERY_STRING} !vid= [NC] 
   RewriteCond %{REQUEST_URI} !/assets/ [NC]   
   RewriteRule ^/APPLICATION/(.*)$ /APPLICATION/?vid=$1 [L] 

その与えられたリソースが見つからないという例外(404)

テストのために、フレンドリーなURLをに変更してhttp://<domainname>/<APPLICATION>/u=QWERTY試し ました

    RewriteRule ^/APPLICATION/u=(.*)$ /APPLICATION/?vid=$1 [L] 

しかし、これも tomcat で 404 になります。

4

2 に答える 2

1

サイレント リライト (アドレス バーで URL を変更しない) が必要な場合は、[R=301,L] の代わりに[P] フラグを使用する必要があります。

基本的に、要求はプロキシ サーバーに渡されるため、クライアントは変更を認識しません。

クライアント、特に検索エンジン ロボットに永続的なリダイレクトを行わせたくないため、[R=301] は必要ありません。

[P] フラグには暗黙の[L] フラグ(最後のコマンド) が含まれているため、次のいずれかの後に発生することを確認する必要があります。

  • www. の削除などのフォールスルー リライトは、[R=301] フラグを使用して永続的なリダイレクトとして行われますが、[L] は使用されません。

  • 禁止された[F] フラグの書き換えは、画像ブリーディング保護の場合と同様に、暗黙の [L] も含まれているため、これらの前に行われます。

apacheドキュメントの [P] フラグの説明で述べたように、 RewriteCondステートメントの正規表現を処理する入力に固有のものにし、ターゲット URL を明示的に指定して、悪意のあるまたは誤ったユーザー入力によって不適切な URL が作成されないようにします。

[P] フラグは接続プーリング (デフォルトのワーカー スレッドを使用) を防止するため、永続的な接続がなく、パフォーマンスが低下する可能性があることに注意してください。

これは https サイトでは機能しないように見えるため、[P] フラグの代わりに [L] フラグをサイレント リダイレクトなしで使用する必要があることに注意してください。残念!

于 2016-11-16T01:25:12.320 に答える
0

R=301ブラウザを新しいアドレスに移動しているので削除します

あなたは単純化することができます:

RewriteEngine On
RewriteCond %{QUERY_STRING} !vid=
RewriteCond %{REQUEST_URI} !/assets/
RewriteRule ^/APPLICATION/(.*)$ APPLICATION/?vid=$1 [L]

/右側がないと、htaccessフローは再開されません

assets一部は、だけ/APPLICATION/assets/でなく、のためだけに必要です。プレーンディレクトリ呼び出しへの一致を制限するため、最後から/assets/削除しました$

于 2012-05-10T07:21:14.100 に答える