Почему мой SSI не работает? - PullRequest
       3

Почему мой SSI не работает?

6 голосов
/ 16 августа 2010

У меня проблемы с передачей параметров запроса в SSI include из моего приложения Zend Framework.

Я пытаюсь включить файл PHP в другой PHP:

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

Это выполняется правильно, если мой hellotest.php (который содержит вышеуказанную строку) находится в корне моего документа.

Если, однако, я делаю то же самое из моего template.phtml (больше не /public_html/hellotest.php) (я использую Zend Framework для этого проекта), test.php вызывается и выполняется без каких-либо параметров запроса (в этом случае х = привет). Никакие параметры запроса не передаются в test.php из моих шаблонов zend_framework.

Имеет ли это какое-либо отношение к тому, как Zend Framework использует .htaccess? Вот копия моих файлов .htaccess (в корне сети: /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]

EDIT: я недавно узнал, что он будет передавать параметры в SSI, взятые из URL. Поэтому, если в моем браузере я наберу http://www.test.com/controller/action?param1=something, он фактически передаст param1 в SSI, но полностью проигнорирует те параметры, которые есть у меня в строке SSI. ... у кого-нибудь есть опыт с этим?

EDIT2 - в ответ Тиму Фонтану: правильно, мой 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.

Ответы [ 2 ]

2 голосов
/ 19 августа 2010

Вместо использования SSI include вы можете попробовать использовать виртуальную функцию php:

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

через http://www.zytrax.com/tech/php/php_ssi.htm

Какой тип кэширования требует использования SSI?Не могли бы вы просто использовать что-то вроде Zend_Cache_Frontend_Output?

1 голос
/ 16 августа 2010

Я никогда не видел, чтобы SSI использовался с PHP таким образом, так что это довольно далеко, но вы можете попробовать изменить:

AddOutputFilter INCLUDES .php

до:

AddOutputFilterByType INCLUDES text/html

причина, по которой он не работает, состоит в том, что ваши файлы больше не имеют расширения .php (или какого-либо расширения), поскольку вы все маршрутизируете через index.php. Предложенное мной изменение отфильтрует весь вывод текста / html (который должен включать PHP) через анализатор SSI, а не по расширению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...