タイトルはほとんどそれをすべて言います。:-) 多くの仮想ホストがあり、リクエストがどの仮想ホストに送信されるかに関係なく、URL を書き換える単一の書き換えブロックを httpd.conf ファイルの先頭に配置したいと考えています。一体どうやってこれを行うのですか?
私はこれを見つけましたが、私の質問は同じです.htaccessファイルに頼らず、各仮想ホストに対して他のアクションを実行せずにこれを行うにはどうすればよいですか?
オムティア!
タイトルはほとんどそれをすべて言います。:-) 多くの仮想ホストがあり、リクエストがどの仮想ホストに送信されるかに関係なく、URL を書き換える単一の書き換えブロックを httpd.conf ファイルの先頭に配置したいと考えています。一体どうやってこれを行うのですか?
私はこれを見つけましたが、私の質問は同じです.htaccessファイルに頼らず、各仮想ホストに対して他のアクションを実行せずにこれを行うにはどうすればよいですか?
オムティア!
RewriteOptions InheritDown
親スコープ (httpd.conf など) で指定して、ルールを変更せずに子仮想ホストに適用します。
RewriteEngine
これは、ディレクティブが次のように設定されている仮想ホストでのみ機能しon
ます。
書き換え構成は仮想ホストに継承されないことに注意してください。つまり、書き換えルールを使用する仮想ホストごとに RewriteEngine on ディレクティブが必要です。
(ソース)
Apache は 2.4.8 以降これをサポートしています (元の質問の時点では利用できません)。
のドキュメントからRewriteOptions
:
InheritDown
このオプションを有効にすると、すべての子構成が現在の構成の構成を継承します。これは、すべての子構成で RewriteOptions Inherit を指定することと同じです。親子関係の処理方法の詳細については、継承オプションを参照してください。Apache HTTP サーバー 2.4.8 以降で使用できます。
InheritDownBefore
上記の InheritDown と同様ですが、現在のスコープのルールは、子のスコープで指定されたルールの前に適用されます。Apache HTTP サーバー 2.4.8 以降で使用できます。
無視継承
このオプションは、現在および子の構成で、InheritDown または InheritDownBefore を指定する親から継承されるすべてのルールを無視するように強制します。Apache HTTP サーバー 2.4.8 以降で使用できます。
( http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions )
デフォルトでは、メイン サーバー コンテキストからの mod_rewrite 構成設定は仮想ホストに継承されません。<VirtualHost>
メイン サーバーの設定を仮想ホストに適用するには、各セクションに次のディレクティブを配置する必要があります。
RewriteEngine On
RewriteOptions Inherit
詳細については、 http://httpd.apache.org/docs/2.2/mod/mod_rewrite.htmlをクリックしてください。
最も簡単な解決策は追加することです
RewriteOptions inherit
各 VirtualHost ディレクティブに。これは、少なくとも .htaccess ファイルをいじるよりもはるかに簡単です。Apacheは、その事実についてかなり明確です
デフォルトでは、書き換え構成は継承されません。これは、RewriteEngine on ディレクティブを使用する仮想ホストごとに設定する必要があることを意味します。( http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html )
どうやらデフォルトを変更する方法は、子 (vhost または director) の RewriteOptions を使用することであるため、各子で何かを行う必要があります。
私はそれをテストしたことがないので、うまくいかないかもしれませんがinclude
、すべての仮想ホスト ブロックにディレクティブを 1 つのファイルに追加してみます。各仮想ホスト構成ブロックを一度変更する必要がありますが、その後は、変更を行うための中心的な場所が必要です。YMMV。
名前のドメイン部分だけを書き直したい場合 (よくあるスペルミスを修正する場合など) は、'inherit' オプションさえ必要ありません。名前のない仮想ホストをセットアップして、無効なホスト名をすべてキャッチし、それらをリダイレクトする前に正しくスペルを変更します。
これはリダイレクトを使用するため、書き換えが適用された後に適切な仮想ホストが見つかります。
Options +Indexes +FollowSymLinks
RewriteEngine on
# If it begins with only domain.com, prepend www and send to www.domain.com
RewriteCond %{HTTP_HOST} ^domain [NC]
RewriteRule ^(.*) http://www.domain.com$1 [L,R=301]
# Correct misspelling in the domain name, applies to any VirtualHost in the domain
# Requires a subdomain, i.e. (serviceXXX.)domain.com, or the prepended www. from above
RewriteCond %{HTTP_HOST} ^([^.]+\.)dommmmmain\.com\.?(:[0-9]*)?$ [NC]
RewriteRule ^(.*) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+\.)?domain.com(.*) http://$1domain.com$2 [L,R=301]
# No-name virtual host to catch all invalid hostnames and mod_rewrite and redirect them
<VirtualHost *>
RewriteEngine on
RewriteOptions inherit
</VirtualHost>
私は常に、「キャッチオール」VHost を、全面的に必要なディレクティブに使用してきました。
Listen 80
NameVirtualHost *:80
<VirtualHost *:80>
ErrorLog "/var/log/apache2/error_log"
</VirtualHost>
<VirtualHost *:80>
ServerName alloftherestoftheVHosts.com
DocumentRoot "/ServiceData/.........
............
そして、それは常に機能しているように見え ました...エラーログが適切に結合されていたなど...しかし、これは以前の/競合する/志を同じくするディレクティブの結果である可能性があります。
個人的なメモ.. Apache 構成スキーマと構文を思いついたのは誰でも、自分の洞窟であまりにも多くの時間を過ごした dingbat、または dingbats のグループでした.... すべてを追い払い、XML 化するか、何かする必要があります! どちらも大きく異なりますが...チェロキーのハローキティセットアッププロセス.. 非常に簡潔なNGinx 構成に..両方とも非常に論理的です..