2010-08-16 84 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