1

私はZendFrameworkを何年も使用していますが、現在修正中のエラー処理に関するいくつかの重大な問題に気づきました。(私はここに別の質問を投稿しました:なぜ私のサイトはHTTPステータスコードに関係なくすべてのタイプのエラーに常にErrorControllerを使用しているのですか?そこでの話を説明しています)。

ここでの私の質問は簡単なものです。Zend Frameworkの一般的な.htaccessファイルはどのように見えますか?

最新のZFドキュメントによると、

SetEnv APPLICATION_ENV development

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

しかし、上記は私にとって新しいものです-誰かがそれが正確に何をするのか説明できますか?私の現在の.htaccessファイルには多くの301リダイレクトコードが含まれていますが、この投稿の目的のために、ここに関連情報のみを貼り付けます。

ErrorDocument 404 http://www.mydomain.com/pagenotfound/
ErrorDocument 503 http://www.mydomain.com/service-unavailable/

RewriteCond %{REQUEST_URI} !^/liveagent
RewriteCond %{REQUEST_URI} !^/blog
RewriteRule !\.(js|ico|gif|GIF|jpg|JPG|jpeg|png|PNG|pdf|css|html|xml|swf|php|mp3|mp4|webm|ogv|f4v|flv|txt|wsdl|css3|ttf|eot|svg|woff)$ index.php

上記は問題なく機能しており、基本的に「liveagent」および「blog」(Wordpress)ディレクトリをZendで実行することはできませんが、次の変更を行う必要があることに気付きました。

Zend Frameworkはすべてのエラーを処理する必要があるため、ErrorDocument404はコードから確実に削除する必要があります。ただし、これを削除すると、www.mydomain.com / this-does-not-exist.phpのようなURLにアクセスすると、404エラーの標準Apacheページが表示されます。ZFまたはErrorControllerは読み込まれません。これは、上記のRewriteRuleでの「php」の除外が原因です。サイトをメンテナンスモードにするために使用する別の「holding.php」ファイルなど、ルート上のphpファイルにアクセスできるようにしたい場合があるため、これを単に削除したくはありません。

標準的な方法は何ですか?php拡張子を削除する必要がありますか?ただし、これはwww.mydomain.com/this-does-not-exist.cssのような他の404を解決しません。これは、上記のRewriteRuleの除外(つまりCSS)でもあります。

したがって、上記のように、上記をZendの.htaccessの新しいコードに完全に変更する必要がありますか?

もしそうなら、私はhtaccessの一種の初心者です-CSS、JS、ビデオファイルなどとブログとliveagentディレクトリをZend Frameworkから除外できるように、その.htaccessコードを変更するにはどうすればよいですか?

4

1 に答える 1

2

長い正規表現を使用してindex.phpにリダイレクトするルールではなく、標準のZF書き換えルールに切り替えます。

以下は、標準.htaccessルールの機能の説明です。

RewriteCond %{REQUEST_FILENAME} -s [OR] # The request is a regular file with size > 0
RewriteCond %{REQUEST_FILENAME} -l [OR] # The request is to a file that is a symlink
RewriteCond %{REQUEST_FILENAME} -d [OR] # The request is to a directory that exists

# if any of the above conditions are true, then simply handle the request as-is
RewriteRule ^.*$ - [NC,L]

# if none of the above match, then rewrite to index.php
RewriteRule ^.*$ index.php [NC,L]

phpこれらのデフォルトの ZF ルールは、既存のファイルや、ドキュメント ルートからアクセスできるその他のファイル へのアクセスを妨げません。リクエストされたファイルが存在する場合、そのファイルのリクエストはそのまま処理されます。 要求されたファイルが存在しない場合、要求は index.php に転送されます。

要求が ZF に転送された後、一致するルートがない場合は、ZF ErrorHandler が呼び出され、(ZF からの) 404 ページが提供されます。

ストック ZF ルールを使用しても、アプリケーションとサーバーの設定で目的の動作が妨げられることはなく、現在使用している正規表現よりも少し効率的であるはずです。実際に変更される唯一の点は、存在しないファイルに対する要求が、Apache ではなく ZF のエラー ハンドラによって処理されるようになったことです。

それがあなたの質問に答えたことを願っています。そうでない場合は、お気軽にコメントしてください。

于 2012-08-31T17:59:29.783 に答える