Apache が RewriteCond と RewriteRule を無視する

Apache が RewriteCond と RewriteRule を無視する

私はここで気が狂いそうです。Apache はRewriteCondと の両方を完全に無視していますRewriteRule。RewriteEngine が に設定されていないため、これはエラーになると思います。他にも と の行がOn多数ありましたが、それらは正常に動作していました。Rewrite ログ (有効にしていました) を確認すると、これら 2 つがスキップされていることが示されていました。他のすべてを削除して、どれも問題の原因ではないことを確認しましたが、確かに、Apache はこの構成でエラーをほとんど発生させずに問題なく処理を進めます。RewriteCondRewriteRule

DocumentRoot /var/sites/public
<Directory /var/sites/public>
    AllowOverride None
    SetEnv APPLICATION_ENV production

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

    Order allow,deny
    allow from all
</Directory>

ここに明らかな誤りがあるはずですが、長い間見つめていたせいでそれに気づかなかったようです。どなたか助けていただければ幸いです。

注: これは Vhost には存在しません。構成には Vhost がありません。RewriteCond を削除しましたが、それでもエラーは発生しません。RewriteEngine On でもこれを試しました。

答え1

ちょっと見てみると、RewriteCond は何も一致しないように見えますが、それ以外は何も一致しないようです。mod_rewrite がこれについてどう感じているかはわかりません。

このルールで具体的に何をしようとしているのですか?

たとえば、(www.)example.com 以外のすべてのドメインに一致させて www.example.com に転送する場合、次のようなルールになります。

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

答え2

これも欲しいですね:

RewriteCond %{HTTP_HOST} .

...または別の書き方:

RewriteCond %{HTTP_HOST}!=""

それで:

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

関連情報