私のサーバーには、次の内容の .htaccess ファイルがあります。
RewriteCond %{HTTP_HOST} ^myhost.local$
RewriteRule ^default/.*$ /index.php?id=12345 [L]
RewriteCond %{HTTP_HOST} ^myhost.local$
RewriteCond %{REQUEST_URI} ^/?$
RewriteRule ^(.*)$ http://myhost.local/default/home [R=302,NC]
この現象は、 http://myhost.local/ をリクエストすると、予想どおりhttp://myhost.local/default/homeに 302 リダイレクトされるのではなく、http://myhostに 301 (!) リダイレクトされることです。 .local/、無限ループになります。
もう 1 つの奇妙な点は、^/$
私の URL と一致するはずなのに一致しないように見えることです^/?
。そのため、何らかの理由で疑問符を使用する必要があります。一致がない場合はいつでも、書き換えは発生しないため、無限ループは発生しません。したがって、これは、条件が満たされている場合、リダイレクト先のコードのみが完全に無視されている場合に、私RewriteRule
の for^(.*)$
が実際に取得されるというさらなる証拠です。
記録のために、次の形式のルールも用意しました。
RewriteCond %{HTTP_HOST} ^myhost.local$
RewriteRule ^default/.*$ /index.php?id=12345 [L]
RewriteCond %{HTTP_HOST} ^myhost.local$
RewriteRule ^/?$ http://myhost.local/default/home [R=302,NC]
これは、最初の例とまったく同じ結果になりました。
実際に指定した URL ではなく、リダイレクトが発生する原因は何ですか?
注意事項:
- この .htaccess ファイルには他のエントリがあります
- この .htaccess ファイルは DOCUMENT_ROOT 内にあります
- デフォルトの VirtualHost が
RewriteOptions inherit
設定されています