2010-08-30 108 views
1

正如this question中討論的那樣,我使用帶有條件流控制語句的Apache mod_include來根據父頁面的URL改變包含的shtml文件的行爲。我遇到的問題是,網站上的一些頁面是PHP頁面,這似乎意味着mod_include指令被忽略(而不是作爲標準html註釋處理)。在PHP中使用Apache服務器端流量控制?

有什麼辦法讓PHP頁面正確處理這些mod_include指令嗎?

具體而言,這裏是我想有處理:

<!--#if expr='"$DOCUMENT_NAME" = /(podcasts\.php)|(series\.php)/' --> 
<li id="features" class="current"> 
<!--#else --> 
<li id="features"> 
<!--#endif --> 

類似的線塊,網站上的文件的.shtml工作,但對於PHP頁面,所有的上述最終輸出到客戶端。

編輯:我最近想到的解決方案是模仿PHP文件中包含的shtml文件的功能。我不喜歡這個解決方案,因爲這意味着將來添加鏈接需要將它們添加到多個位置。

+0

你有'問題<! - #包括虛擬= 「foo.php」 - >'不是沒有被mod_include負責處理執行或.php文件?前者是 – VolkerK 2010-08-30 01:03:07

+0

。在這種情況下,不是專門用'<! - #include - >',而是用'<! - #if expr ='「$ DOCUMENT_NAME」= /(mypage\.php)/ - >' – 2010-08-30 02:01:38

+0

編輯的問題提供更多細節。 – 2010-08-30 02:04:40

回答

1

假設你正在運行通過mod_php,並且PHP(甚至可能沒有關係)只是增加:

AddOutputFilter INCLUDES .shtml .php 

,它工作正常兩者的.shtml以及帶被正確解析.PHP。

+0

是的!將此添加到我的.htaccess文件導致所有頁面按需要運行。優秀! – 2010-09-02 22:53:08

0

我剛開始閱讀有關SSI卻發現這句話在 http://httpd.apache.org/docs/2.2/howto/ssi.html#configuring

什麼不該做一個簡短的評論。您偶爾會看到人們建議您只告訴Apache解析所有.html文件以獲取 SSI,這樣您就不必混淆.shtml文件名。這些 人可能沒有聽說過XBitHack。要記住 的一點是,通過這樣做,您要求Apache讀取通過 發送給客戶端的每個文件,即使它們不包含任何SSI指令。這可能會減慢速度, 不是一個好主意。

因此,如果我理解正確的話,您不應該在AddOutputFilter中包含.php,因爲如果強制Apache搜索SSI指令的所有.php頁面,因爲它會降低服務器速度。

也許你的問題有另一種解決方案?

http://httpd.apache.org/docs/2.2/mod/mod_include.html#xbithack

/菲利普