6

小さな違いのあるファイルがたくさんあります。インクルードされたファイルにはこれが含まれており、長いパスの一部を区別しようとしています。

<!--#if expr="${DOCUMENT_URI}=/internet/"-->Internet<!--#else-->Intranet<!--#endif-->

私が得るエラーログで

AH01337: /opt/apache/htdocs/ssi/time.shtml の expr "${DOCUMENT_URI}=/internet/" を解析できませんでした: '$' 付近で解析エラーが発生しました

このテーマには、中括弧がない、引用符の内側に括弧がある、コメントの終わりの前にスペースがある、または =~ など、さまざまなバリエーションがありますが、何も役に立ちません。mod_include のデバッグ設定がないようです。何が問題なのかを教えてくれます...

私が見つけた別の変種は

<!--#if expr='"${DOCUMENT_URI}"=~/internet/'-->

これによりエラーは発生しません。REQUEST_URIしかし、変数が設定されていないかのように、と同様に常に else ブランチを選択します。しかし、私はそれらをうまくエコーできます。/.+internet.+/これを固定している場合に備えて、私も試しました。

これらは CGI 変数なので、cgid_module もロードしようとしましたが、どちらもうまくいきませんでした。

4

5 に答える 5

3

他の多くの人が指摘したように、このスタイルを使用できますがv("foo")、Apache 2.4 ドキュメント ( http://httpd.apache.org/docs/2.4/expr.html#examples ) に示されている例では、次の形式になっています。

<!--#if expr="%{DOCUMENT_URI} =~ /internet/"-->Internet<!--#else-->Intranet<!--#endif-->

変数の $ の代わりに % と=~for regex の一致に注意してください。

これをテストしたところ、正常に動作します。

(またはSSILegacyExprParser on、前述のように、2.2.x 形式との下位互換性を確保するために使用します。しかし、この互換性は遠い将来のある時点で削除されると予想しています..)

于 2016-08-17T10:34:51.303 に答える
1

私はそれを動作させました:

 <!--#if expr='v("foo") = "bar"' -->
 foo is bar
 <!--#endif --> 

フロー制御要素を参照してください

于 2015-11-08T10:31:14.987 に答える
0

新しいApacheバージョンはap_exprを使用します。関連するリンクを追加したかっただけです:Apachedocs。v関数はまだ文書化されていないことに注意してください。

于 2013-02-05T13:04:31.723 に答える