2017-10-12 5 views
1

古いサイトのURLから新しいサイトのURLにリダイレクトしたい。 私はhtaccessファイルに多くのルールを持っています。 下記の例を参照してください。htaccessで定義されたすべての書き換えルールにクエリーを追加する一般的な書き換えルール

RewriteRule ^blog/one$ http://www.newsite.com/blog/x/ [R=301,L] 
RewriteRule ^blog/two$ http://www.newsite.com/blog/y/ [R=301,L] 
RewriteRule ^blog/three$ http://www.newsite.com/blog/z/ [R=301,L] 
and so on.......... 

リダイレクトは正常です。 ここで、すべての宛先URLにクエリ文字列"?key = value & anotherKey = anotherValue"を追加します。 1行のコードでこの作業を行う方法はありますか? または、このクエリをすべてのURLに1つずつ追加する必要がありますか?ここで

は、私が欲しいの例である:

RewriteRule ^blog/one$ http:www.newsite.com/blog/x/?key=value&anotherKey=anotherValue [R=301,L] 

EDITED: 完全htaccessファイル:

<IfModule mod_rewrite.c> 

RewriteEngine On 
RewriteBase/

#Custom redirection Starts form here 

RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^.*$ $0?key=value&anotherKey=anotherValue [L,NC] 

#home page redirection 
RewriteRule ^$ http://newsite.com/ [R=301,L] 

#Blog Rewrite Rules 
RewriteRule  ^blog/this-blog-is-included-for-redirection/?$ http://newsite.com/blog/ [R=301,L] 

#Custom redirection ends here 


RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

私はこのURLにアクセスします。 oldsite.com/blog/this-blog-is含まれるリダイレクト/

リダイレクト先: newsite.com/blog/?key=value & anotherK ey = anotherValue

これは問題ありません。私はこのURLにアクセスすると

は: oldsite.com/blog/this-blog-is-: oldsite.com/blog/this-blog-is-exluded-for-redirection/

それにリダイレクトexluded-for-redirection /?key = value & anotherKey = anotherValue

ここではクエリを追加しません。

+0

ルールが働いています。私はすべての目的地のURLに1つまたは数行のコードでクエリ文字列を追加したい。これを行う方法はありますか? –

+0

これは 'http://www.newsite.com/blog/x/?param1 = x&param2 = y'' [R = 301、L、QSA]のようにすることができます。 –

+0

'^blog/one'すべてのブログで '/ blog/$ 1?key = ...'に書き換えるには '/ block /(.*)'を使うことができます。あなたがリダイレクトを持っていて、書き換えをしていないという問題があるので、無限ループが発生し、正規表現を洗練したり、条件を追加したりする必要があるかもしれません。 – apokryfos

答えて

1

あなたは自動的にURIを対象とするクエリ文字列を持ち越しますクエリ文字列を設定し、ルールをリダイレクトするためにあなたのリダイレクトルールの前に、一般的なルールを守ることができます。

RewriteEngine On 

# generic rule for query string 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^blog/(?:one|two|three)/?$ $0?key=value&anotherKey=anotherValue [L,NC] 

RewriteRule ^blog/one/?$ http://www.newsite.com/blog/x/ [R=301,L,NC] 
RewriteRule ^blog/two/?$ http://www.newsite.com/blog/y/ [R=301,L,nC] 
RewriteRule ^blog/three/?$ http://www.newsite.com/blog/z/ [R=301,L,NC] 
+0

私はR = 301をあなたのルールに追加しました。RewriteRule^blog /(?:one | two | three)/?$ $?key = value&anotherKey = anotherValue [R = 301、L、NC]この前に、 "oldsite.com/blog"というURLは機能していませんでした。 "oldsite.com/blog/"と "oldsite.com/blog/anything"というURLは動作しています。あなたの答えを少し説明していただけますか? htaccessファイルのどこにでもジェネリックルールを使用できますか? –

+0

確かに。私は1つのジェネリックルールを追加しました。このルールはクエリ文字列がないかどうかをチェックし、その条件が成功するとパターン '^ blog /(?:one | two | three)/?$'で定義されたいくつかの選択されたURIに所望のクエリ文字列を追加します。このため、次のルールセットでは、共通のクエリ文字列がすでに追加されています。 – anubhava

+0

newsite.comにリダイレクトすると、クエリ文字列には、 が追加されますが、リダイレクトからいくつかのURLが除外され、そのURLにもクエリが追加されます。 oldsite.comにクエリを追加するのを避けるにはどうすればいいですか? –

関連する問題