2015年1月26日月曜日

Zend Frameworkのhtaccessの不思議(2)mod_rewriteの環境変数指定と呼び出し

前回の記事
Zend Frameworkのhtaccessの不思議(1)mod_rewriteの後方参照に続いて、今回は、一体Zend Frameworkのhtaccessにおける記述はなにをしているのか、について掘り下げてみる。

==============
【1行目】RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
【2行目】RewriteRule ^(.*) - [E=BASE:%1]
【3行目】RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]
==============

その前に前回書き逃していた点を一つ。

[E=BASE:%1]

この記述は、環境変数をsetしている。

設定   [E=変数名:値]
呼出   %{ENV:変数名}   として呼び出すことができるみたい。


そして本題 「いったいこの3行はなにをやっているのか」 だが、まずその直前のコメント行を読んでみると、

==============
# The following rewrites all other queries to index.php. The 
# condition ensures that if you are using Apache aliases to do
# mass virtual hosting, the base path will be prepended to 
# allow proper resolution of the index.php file; it will work
# in non-aliased environments as well, providing a safe, one-size 
# fits all solution.
==============

とある。

基本的には、リクエストされたパスが実在するファイルでもディレクトリでもシンボリックリンクでもない場合は、アクセスが全てフロントコントローラ(index.php)に集まる作りになっている。

そして上記のコメントでは「Apacheのaliasesを使用している場合でも、正しくフロントコントローラ(index.php)のパスを認識させるため」と書かれている。

また、以前の古いバージョンでは、
==============
RewriteRule ^.*$ index.php [NC,L]
==============
の1行だけだった。


まあ、上記のコメントでズバリな回答が出たことにもなるが、要するにpublic(Documentoroot)配下のディレクトリ・ファイルをどこか別のディレクトリに配置して、Apacheのエイリアスを指定するやり方でも、そうでない普通の配置をした時と変わらない感覚で管理ができる、ということのようだ。

viewscript側でも、この仕様になっていると、「$this->basePath()」で、[E=BASE:%1]で設定されたBASEのパスがそのまま出力されるようなので便利といえば便利。

ほんのちょっとした些細な気遣い程度のことだが、やはりなるべく余計なことは考えずにアプリ開発を進めたいので、なるほどなと思える設定だった。


にしても、まだ細かいところまでちゃんと理解できとらんな、、。


参考にさせてもらったのは以下。
Qiita - mod_rewriteでApache環境変数を一時変数として利用する

0 件のコメント: