为什么我的SSI不起作用?

时间:2010-08-16 12:57:24

标签: php zend-framework apache2

我遇到了将查询参数传递到我的zend框架应用程序中的SSI包含的问题。

我正在尝试将PHP文件包含在另一个PHP中:

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

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

但是,如果我在template.phtml中做同样的事情(不再是/public_html/hellotest.php)(我在这个项目中使用Zend Framework),调用test.php并执行它而不需要任何查询参数(在这种情况下x =你好)。没有查询参数从withitn my zend_framework templates传递到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]
编辑:我最近发现,它会将参数传递到从URL中获取的SSI。因此,如果在我的浏览器中输入http://www.test.com/controller/action?param1=something,它实际上会将param1传递给SSI,但它将完全忽略我在SSI线上的参数。 ......有人有这方面的经验吗?

EDIT2 - 对Tim Fountain的回应:对,我的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。

2 个答案:

答案 0 :(得分:2)

您可以尝试使用php虚函数:

,而不是使用SSI include
virtual ("/ssi/test.php?x=hello");

通过http://www.zytrax.com/tech/php/php_ssi.htm

什么样的缓存需要您使用SSI?难道你不能只使用像Zend_Cache_Frontend_Output这样的东西吗?

答案 1 :(得分:1)

我从未见过用这种方式与PHP一起使用的SSI所以这是一个很长的镜头,但是你可以尝试改变:

AddOutputFilter INCLUDES .php

为:

AddOutputFilterByType INCLUDES text/html

它不起作用的原因是你的文件不再具有.php扩展名(或任何扩展名),因为你通过index.php路由所有内容。我建议的更改将通过SSI解析器过滤所有text / html输出(应该包括PHP),而不是通过扩展来过滤。