23

tl;dr: .conf または .htaccess ファイルで次のことを行うにはどうすればよいですか:

<IfApache22>
  # Do A
</IfApache22>
<IfApache24>
  # Do B
</IfApache24>

より長い質問:

Apache 2.4 では、古いOrder get は廃止され、Requireが採用されました。

私の.htaccessファイルには

<FilesMatch "\.(long|list|file|types)$">
  Order allow,deny
</FilesMatch>

これは、 access_compatを有効にしない限り、Apache が起動しないことを意味します。そうすることで便利な回避策が得られますが、構成が多くのサーバーに配布されるため、両方の構文で機能するソリューションが必要です。問題は、現在のバージョンの Apache を検出し、正しいディレクティブを適用する方法です。

多くの人に配布され、使用されているフレームワークにファイルを使用するつもりですが、特定のサーバー設定があるかどうかを制御/保証することはできません。そのため、ファイルを2.2/2.4「不可知論者」。

4

5 に答える 5

31

私が使用したハック。

# Apache 2.2
<IfModule !mod_authz_core.c>
    Satisfy Any
</IfModule>

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all granted
</IfModule>
于 2013-02-26T05:09:57.983 に答える
2

同じホストで異なるバージョンの Apache を実行できます。Q: 別々のディレクトリにある別々の設定ファイルの何が問題になっていますか? 正直なところ、それがおそらく最もクリーンなアプローチだと思います...

それにもかかわらず、Apache .conf ファイル<IfDefine>では、実行時に「-D」で指定できる を許可します。

http://httpd.apache.org/docs/2.0/mod/core.html#ifdefine

于 2012-05-22T17:47:27.910 に答える
1

アクセス制御に mod_rewrite を使用することで、知る必要を回避できます。

RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(long|list|file|types)$
RewriteRule .* - [F,L]
于 2013-11-22T01:00:45.577 に答える