2011-07-15 6 views
0

私は何が間違っているのか見逃してしまったり、ここで欠けているものがあります。書き換えられたURLのクエリ部分をリモートでリダイレクトした後に削除するにはどうすればよいですか?

基本的には、HTML、CSS、およびJavaScriptファイルのリクエストを個別に処理するために、中央のディスパッチャファイル(index.php)と組み合わせて使用​​される簡単な書換えルールがあり、そのように見えます。

RewriteEngine on 

RewriteRule (.+)\.html$ index.php?action=view&url=$1.html [L] 
RewriteRule (.+)\.css$ index.php?action=resource&type=css&url=$1.css [L] 
RewriteRule (.+)\.js$ index.php?action=resource&type=js&url=$1.js [L] 

長い話では、これらのルールが正常に動作しかし、私はに永続的にリダイレクトする必要のいずれかのURLにエラー(301)があることをサイトの責任SEO機関によって通知されてきた短いカット正しいリンク。リダイレクトが必要なURLは1つだけなので、URL書き換えの代わりにRedirectを使用し、次のルールを追加しました。これは、リモートリダイレクトがpage1.htmlのために行われた後、私は、クエリの一部を取得しているという事実を除いてあまりうまく機能

Redirect 301 /page1.html /page2.html 

?アクション=ビュー& URL = page2.html)がブラウザに表示しましたアドレスバー。私は完全にHTMlのリライトルールは、URLで完了した後に単にクエリ文字列部分を追加したが、リモート301リダイレクトが実行された後にクエリ部分を取り除くためには何が必要なのかを完全に理解しています。

ちょうど私はURL書き換えメソッドも試しましたが、私はLフラグをどうにかして無視し、HTML書き換えルールを実行しているようです。

答えて

1
RewriteRule ^page1\.html$ page2.html [L,R=301] 

これはリライトリダイレクトであり、クエリ文字列を切り捨てる必要があります。他の3つのルールの前に置いてください。それ以外の場合は無視されます。

+0

私はすでに、あたかもそのルールを何百回も書き直してみましたが、それは単にうまくいかなかったのです...私がテストサーバーのフォルダが仮想のDocumentRootテストのために使用されるホスト:( RewriteBaseの単純な追加によって問題が解決されました。 – brezanac

0

WebサーバーとWebサーバーのバージョンによってソリューションがどれほど変わるのかわかりませんが、私にとってはうまくいきました。「既存のクエリ文字列を消去する場合は、疑問符 "を入力します。

を参照してくださいhttp://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteruleで「クエリ文字列の変更」(ApacheのV2.4)

ので、

RewriteRule ^page1\.html$ page2.html? [L,R=3xx] 

Rフラグは新しいURIのために必要とされているが示されたべきではなく、元のクエリ文字列。しかし、Rフラグがなくても、クエリ文字列は渡されません。

関連する問題