2012-05-10 17 views
0

私はApacheの背後にあるtomcatを実行しています。今、私の必要性は、URLからパラメータ名を削除してフレンドリーなURLを適用することです。 私はApacheでサイレントリライトURLが必要

<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>/vid=QWERTY 

として

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

これらの内部べき作品がそうTomcatの中で、私はVIDの値を取得し、私は試してみました。このために適宜

要求を処理することができますしたいです

これを適用することで、私が与えたときに働くアプリケーション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になります。

答えて

0

あなたが単純化でき

新しいアドレスにブラウザを動いているようR=301を削除します。

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

/ずに右部分に、htaccessのフローは

assets部品が必要とされ、再起動されません/APPLICATION/assets/の場合のみで、/assets/ではなく、$を最後から削除しました。これは、プレーン・ディレクトリ・コール

+0

rightpartを削除すると、Apacheで「Bad Request」エラーが発生します。だから、私は右の部分からスラッシュ(/)を取り除かずに試しました。 Tomcatアプリケーションで404(リソースが見つかりません)エラーが発生しました。 Firebug newtowkでは、Red(404)のすべてのリクエストも追跡します。 – gnanz

+0

filepathを使用しようとします: 'RewriteRule ^/APPLICATION /(.*)$ APPLICATION/index.jsp?vid = $ 1 [L]' –

1

アドレスバーでURLを変更せずにサイレント書き換えを行う場合は、[R = 301、L]の代わりに[P] flagを使用する必要があります。

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

クライアント、特に検索エンジンのロボットに永続的なリダイレクトを行わせたくないので、[R = 301]は不要です。

[P]フラグが暗黙の[L] flag(最後のコマンド)が含まれ、あなたは彼らがすべての後に発生を確認するよう:。

  • WWWを取り除くなどのフォールスルーの書き換えは、永久として行われます[R = 301]フラグでリダイレクトされますが、[L]はリダイレクトされません。

  • 禁じられた[F] flag書き換えは、画像のにじみ防止のように、暗黙の[L]を含んでいるので、これらの前に行われます。

のapacheドキュメントの[P]​​フラグの説明の下で述べたように、どのような入力を処理し、かつ明示的にターゲットURLを指定して、悪質なようにされているようごのRewriteCond文正規表現が具体的にします誤ったユーザー入力が不適切なURLを作成することはありません。

[P]フラグは、接続プーリング(既定のワーカースレッドを使用)を防止するため、永続的な接続がなく、パフォーマンスの低下を招く可能性があります。

これはhttpsサイトでは機能しないように見えるので、[P]フラグの代わりに[L]フラグを使用する必要があります。バマー!

関連する問題