Got*_*tys 6 php zend-framework apache2
我遇到了将查询参数传递到我的zend框架应用程序中的SSI包含的问题.
我想在另一个PHP中包含一个PHP文件:
<!--#include virtual='/ssi/test.php?x=hello' -->
Run Code Online (Sandbox Code Playgroud)
如果我的hellotest.php(包含上面一行)驻留在我的文档根目录中,这将正确执行.
但是,如果我从template.phtml(不再是/public_html/hellotest.php)中做同样的事情(我在这个项目中使用Zend Framework),则调用test.php并执行它而不使用任何查询参数(在此case x =你好).没有查询参数从withitn my 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]
Run Code Online (Sandbox Code Playgroud)
编辑:我最近发现,它会将参数传递到从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 =你好) .如果我没有在URL中传递任何内容,则不会将任何内容传递给SSI.
我从来没有见过 SSI 以这种方式与 PHP 一起使用,所以这是一个不太可能的事情,但是你可以尝试更改:
AddOutputFilter INCLUDES .php
Run Code Online (Sandbox Code Playgroud)
到:
AddOutputFilterByType INCLUDES text/html
Run Code Online (Sandbox Code Playgroud)
它不起作用的原因是您的文件不再具有 .php 扩展名(或任何扩展名),因为您通过 index.php 路由所有内容。我建议的更改将通过 SSI 解析器过滤所有文本/html 输出(应包括 PHP),而不是通过扩展来过滤。