2016-10-22 3 views
1

最近、自分のサイトを再設計して、http://www.sitename.com/としましょう。クエリ文字列を含むページをホームページにリダイレクトする方法はありますか?

再設計する前に、ホームページのURLは次のようなものだった:http://www.sitename.com/default.asp?id=1&lg=1

古いページも奇妙なクエリ文字列を持っていたし、彼らはもはや関連していないので、私はにDefault.aspファイルで始まるすべてをリダイレクトするにはホームページ。

RewriteRule default\.asp.* \ 

代わり

RewriteCond %{QUERY_STRING} ^default.asp?id=1&lg=1$ [NC] 
RewriteRule http://www.sitename.com/ http://www.sitename.com/? [R=301,L] 

これは私がこれまで持っている最も近いですが、私はその間違ったかなり確信しています。 お手伝いできますか?

アップデート:私は一番上にし、下部に私のルールを入れて試してみました

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteRule default\.asp.* /? 
</IfModule> 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

、(運):これは私の全体の.htaccessです。私はそれを何とか他のルールに埋め込むべきですか?

+0

あなたがこれまでに書かれたもので直面している問題は何ですか?また、私は.htaccessファイルの専門家ではありませんが、最後のスラッシュは他の種類のスラッシュではいけませんか? '/' –

+0

これは明らかに間違っています。なぜなら、スラッシュまでは失敗しているからです...私は分かりません。私は他の例を自分のニーズに合わせて修正しようとしていますが、一般的に.htaccessに触れるのは初めてです – Mpampirina

答えて

1

あなたはこれらのルールを使用することができます。

# BEGIN WordPress 
<IfModule mod_rewrite.c> 

RewriteEngine On 
RewriteBase/

# redirect /default.asp to landing page 
RewriteRule default\.asp$ /? [L,NC,R=301] 

RewriteRule ^index\.php$ - [L,NC] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php [L] 

</IfModule>  
# END WordPress 
+1

ええ。これはうまくいった。私はそれを期待していなかったが、NC、R = 301はすべての違いを作った。ありがとう – Mpampirina

1

あなたはこの

RewriteRule default\.asp.* /? 

のようなルールを設定した場合thisサイトに基づいて、それが動作するはずです。ここで

はあなたがリライトにクエリ文字列を置き換えることができますどのようにするための参照です:デフォルトではクエリ文字列

を変更

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

、クエリ文字列を変更せずに通過させます。ただし、 の場合は、 文字列部分を含む置換文字列にURLを作成します。置換文字列 の中の疑問符を使用して、 クエリ文字列に次のテキストを再挿入する必要があることを示します。 既存のクエリ文字列を消去する場合は、 置換文字列を疑問符だけで終了します。新しいクエリと古いクエリを組み合わせるには、[QSA]フラグを使用します。

UPDATE

あなたのコメントに基づいて、これを試してみてください。

# BEGIN WordPress 

RewriteEngine On 
RewriteBase/
RewriteRule default\.asp.*$ /? [L] 

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

# END WordPress 

その一致が見つかった書き換え処理を終了RewriteRule default\.asp.*$ /? [L]の終わりに[L]に注意してください。 L flag

Lフラグを指定しない場合、一致するものがないか、Lフラグと一致するまで、残りのルールが.htaccessに続きます。それはswitchのように考えてください。どちらの場合もbreakが必要です。そうでない場合は、次のケースに進みます。

+0

ツールに基づいています。しかし、私はそれが私のhtaccessの残りの部分と衝突すると思う: '#BEGIN WordPress RewriteEngine On RewriteRuleデフォルト\ .asp。* /? ! でRewriteBase/ のRewriteRule ^指数\ .PHPの$で <のIfModule mod_rewrite.c> RewriteEngine! - [L] するRewriteCondの%{REQUEST_FILENAME} -f するRewriteCond%{REQUEST_FILENAME} のRewriteRuleを-d。 /index.php [L] #END WordPress' 私のルールを上に置いてみました。下に置いてみました。私は他のアイデアは持っていません。 – Mpampirina

+0

idead =アイデア。私は乱雑なコードをお詫びします、私はそれをより読みやすくするために私の最初の投稿を編集します。リファレンスには答えがあるかもしれませんが、それはあまりにも進んでいます - 私が読んでいるものは分かりません:S – Mpampirina

+0

答えが更新されました。 –

0

default.aspのあなたは%{REQUEST_URI}変数を使用して照合する必要がファイル名です。クエーストリングの一部ではありません。 default.aspのが含まれている要求されたURIをリダイレクトするには、次のように使用することができます。

RewriteCond %{REQUEST_URI} /default\.asp [NC] 
RewriteRule^http://sitename.com/? [R,L] 
関連する問題