0

私がstackoverflowを使用するのはこれが初めてです.Googleのおかげで、または何人かの友人の助けを借りて、開発に関する質問への答えを見つけることができます. 今回ではない !

二重ルールを定義したい .htaccess ファイルに問題があります。最初に、URL 書き換え用に次のコードを用意しました。

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*) /index.php?query=$1&%{QUERY_STRING} [L]

それは魅力のように機能していますが、Google によってインデックス化された Web サイトのページの多くが私の Web サイトのサブドメインで複製されていることがわかったので、このコードを .htaccess に追加することにしました。

RewriteCond %{HTTP_HOST} !mydomain.com/$
RewriteRule ^(.*) http://www.mydomain.com/$1 [R=301,L]

RewriteEngine をオンにした直後に、このコードを追加したことに注意してください。結果はほぼ期待どおりです。mail.domain.com/mypage.html などのサブドメインからの 301 リダイレクトは機能しており、www.domain.com/mypage.html につながりますが、ページを書き換える URL の 2 番目のルールは取り消されたようです! したがって、2 番目のルールを使用するすべてのページで 404 エラーが発生します。

私は多くの異なることをテストしましたが、それを修正する方法を理解できませんでしたか? 誰でも私が成功するためのヒントを持っていますか?

よろしくお願いします!

4

1 に答える 1

1
RewriteCond %{HTTP_HOST} !mydomain.com/$

で終わらないホスト名を要求しているため、この条件は常にmydomain.com/一致します。パスのないホスト名のみが含まれているため、スラッシュで終わることはあり%{HTTP_HOST}ません。条件は常に一致するため、常に有効であり、 (最後のルール)RewriteRuleとしてマークされます。[L]リダイレクト ループが発生しない理由がわかりません。おそらくmod_rewrite、URL が変更されていないときに書き換えを停止する短絡ロジックです。

おそらくあなたが望むのはこれです:

RewriteCond %{HTTP_HOST} !=www.mydomain.com
RewriteRule ^(.*) http://www.mydomain.com/$1 [R=301,L]
于 2012-06-20T09:35:22.827 に答える