0

If, elseホスト/ドメイン名に基づいて書き換えルールを組み合わせることができるタイプのコードを探しています。したがって、ドメイン名が「domainA」の場合はaをbに、cをdにリダイレクトし、ドメイン名が「domainB」の場合はxをyに、zをpにリダイレクトします。基本的に、以下で行ったように、条件を何度も書きたくありません。

私はhtaccess用に次のコードを書きました

    RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
    RewriteCond %{HTTP_HOST} ^www\.domain\.com$
    RewriteRule ^home /? [L,R=301]

    RewriteCond %{HTTP_HOST} ^domain\.com$ [OR]
    RewriteCond %{HTTP_HOST} ^www\.domain\.com$
    RewriteRule ^home-old /? [L,R=301]

上記では、同じホスティングスペースを指す複数のドメインがあり、htaccessがすべてに共通しているため、ホストを使用しています。

特定のドメインのリダイレクトのセットに対してdomai名を何度も書き込む代わりに、ドメインの上記の複数の条件を1つに組み合わせることができますか?

アドバイスしてください、ありがとう!

4

1 に答える 1

1

mod_rewriteには、そのようなif-then-else構造は実際にはありません。ルールを賢くするか(ルールが読めなくなったり、修正できなくなったりすることがあります)、すべてについて明確にする必要があります。

特定の例では、正規表現を使用してそれらを組み合わせることができます。

^domain\.com$になり^www\.domain\.com$ます^(www\.)?domain\.com$

^home最初はURIが。で始まる場合にのみ一致し^home-old、実際にはで始まるためです(文字列の終わりを示す記号はありません)。だからあなたは見ています:^home homehome-oldhome$

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC]
RewriteRule ^home /? [L,R=301]

を使用して具体的にする必要がある場合は$、正規表現を次のように変更できます。

RewriteRule ^home(-old)?$ /? [L,R=301]

編集:

ホーム、ボティック、ヘアチップの代わりに他のURLがある場合は、毎回RewriteCondを作成する必要がありますか?私はあなたから確認するたびにそれを書かなければならないと思います

はい、毎回条件を繰り返す必要があります。または、ルールの最初にパススルーを作成できます。

RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC]
RewriteRule ^ - [L]

つまり、ホストのリクエストではないものはすべてwww.domain.comまたはdomain.comであり、書き直さずに通過します。上記以外のホストからのリクエストのみがこれらのルールに到達するため、この後にルールを設定できます。

これは、私が以前に言及した「賢い」ビットです。これにより、上部に厳密な条件を設定しているため、ルールを変更したり、後で修正したりするのが難しくなる可能性があります。

于 2012-10-26T19:18:45.500 に答える