2010-08-16 135 views
6

我有问题,从我的zend框架应用程序中传递查询参数到SSI包括。为什么我的SSI不工作?

我想包括另一个PHP中的PHP文件:

<!--#include virtual='/ssi/test.php?x=hello' --> 

这正确执行,如果我的hellotest.php(其中包含上述行)驻留在我的文档根目录。

如果,但是我在我的template.phtml(而不是/public_html/hellotest.php)中做同样的事情(我在这个项目中使用Zend Framework),test.php被调用并且执行时没有任何查询参数(在这种情况下x = hello)。没有查询参数从withitn我的zend_framework模板传递到test.php。

这和zend框架使用.htaccess的方式有什么关系吗? 这里是我的.htaccess文件副本(在Web根:/public_html/.htaccess)



SetEnv APPLICATION_ENV development 

AddOutputFilter INCLUDES .php 

RewriteEngine On 

RewriteRule (.*/?)(.*css)$ combine.php?type=css&files=$1$2 [NC,L] 
RewriteRule (.*/?)(.*js)$ combine.php?type=js&files=$1$2 [NC,L] 

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

编辑:我最近发现,它会传递参数到SSI从URL拍摄。因此,如果在我的浏览器中输入http://www.test.com/controller/action?param1=something,它实际上会将param1传递给SSI,但它将完全忽略我在SSI行上的参数。 ...有谁有这方面的经验?我的test.php是在public_html/ssi/test.php ..但是,我从一个ZF模板文件调用,它被ZF解析总是..不确定..不确定“只要它没有被ZF解析”,你所要做的就是什么。在我的test.php中,我简单地输出了var_dump($ _ GET) - 没有其他任何东西在那个php文件中,只有那一行。我从ZF模板文件中调用它的方式如下所示:<!--#include virtual='/ssi/test.php?x=hello' -->

。奇怪的是,如果我键入http://mydomain.com/controller/action/?x=hi_there,它实际上会将该X参数传递给我的SSI包含行,并将覆盖原来在那里的任何内容(x = hello)。如果我没有在URL中传递任何内容,则不会传递给SSI。

+0

任何你不能只使用PHP的原因包括? <?php $ x ='hello';包括'test.php'?> – 2010-08-16 13:26:47

+0

是的,我需要SSI,因为缓存机制... include函数在这种情况下不会帮助我。 – Gotys 2010-08-16 15:14:29

+0

您的Apache配置为将.phtml文件作为PHP脚本处理吗? – 2010-08-16 17:33:08

回答

1

我从来没有见过SSI使用PHP这种方式,所以这是一个长镜头的东西,但可以尝试更改:

AddOutputFilter INCLUDES .php 

到:

AddOutputFilterByType INCLUDES text/html 

它的原因不工作的是你的文件不再有.php扩展名(或任何扩展名),因为你通过index.php路由所有的东西。我建议的更改将通过SSI解析器筛选所有文本/ html输出(应该包括PHP),而不是通过扩展来完成。

+0

嗯.. 。这没有奏效..它没有破坏任何东西,但它也没有帮助任何东西... – Gotys 2010-08-17 04:57:42

+0

我已经尝试过这个地方现在,它似乎为我工作,只要PHP文件我include不被ZF解析,我假设你的test.php文件在public_html/ssi/test.php中?你用来访问test.php中的查询参数吗? – 2010-08-25 20:38:20

2

而不是使用SSI的包括,你可以尝试使用PHP虚拟功能:通过http://www.zytrax.com/tech/php/php_ssi.htm

什么样的缓存,您需要使用SSI

virtual ("/ssi/test.php?x=hello"); 

?你不能只使用像Zend_Cache_Frontend_Output这样的东西吗?

+0

我尝试了你的建议,但是这可以做'做任何事情......我会继续研究这个,同时回答你的问题: 我的应用程序将大量使用光油进行缓存,Varnish使用他们称之为ESI的东西,类似于SSI。但是我想以某种方式编写我的应用程序,这样如果Varnish因为任何原因失败,应用程序将自动从ESI退回到SSI。这就是为什么我需要让SSI以某种方式工作......但没有运气。 – Gotys 2010-08-19 17:19:19