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