TLDR:我正在尋找一種方法來爲保留MIME類型的文件系統提供網絡資源(css,jpg等)。Php include()正確的MIME類型
我正在創建一個驗證來自另一個域(通過一次性令牌)的用戶的php封裝器,創建一個會話,然後將服務文件,多個網站放在單獨的目錄中,否則在該用戶的可訪問目錄內。
到目前爲止,我已經使用php來處理驗證和mod_rewrite,通過將請求的頁面添加爲get的包裝器來重定向目錄內的任何請求。
問題是,當我打開鏈接到其他資源的網頁時,它會通過每個資源的包裝運行,並且不保留MIME類型。因此格式化會被搞砸。
有沒有人有一個工作或更好的方式來通過PHP腳本從文件系統服務文件。
這裏是我的重定向規則:
<Directory /var/www/ssl/auth>
RewriteEngine On
RewriteBase /auth
RewriteRule ^(.*) /wrapper.php?topage=https://%{SERVER_NAME}/auth/$1
</Directory>
,這是包括:(它被選中後,該文件存在)
$path = 'https://'.$_SERVER['SERVER_NAME'].'/';
$abs_path=substr($_GET['topage'], strlen($path));
include ($abs_path);
下面是我得到的錯誤(使用開發工具鉻)
Resource interpreted as Stylesheet but transfered with MIME type text/html
我創建這個,使我的學校的蘋果用戶可以發佈課程網站網站(使用iweb並在內部託管)需要身份驗證,並且從學校的主網站鏈接(外部託管)時無需登錄兩次即可訪問。
西裝堅決要求它設置爲跨域。 如果您有任何對此特定問題的建議或如何實現身份驗證。跨域讓我知道。
解決方案
Tandu。感謝您使用您制定的概念提供的幫助,我能夠使用堆棧溢出來解決我的問題,這裏是解決方案。我<,發現如何獲得MIME類型,然後我使用header()
作爲一種魅力傳播它。
$path = $proto.$_SERVER['SERVER_NAME'].'/';
$abs_path=substr($_GET['topage'], strlen($path));
$type = (get_object_vars(apache_lookup_uri("$abs_path")));
header('Content-type: '.$type['content_type']);
readfile($abs_path);
希望這可以幫助別人。
沒錯。我明白你的意思。如果它只是由apache2提供服務,但每個文件都由php進行預處理(使用include()),然後輸出由Apache提供服務,這將起作用。我如何'include()'並保留MIME類型。 – 2011-05-20 05:07:45
這取決於。如果你只是'include()'一個文件,那麼你可以根據其擴展名在php中設置頭文件(帶有'header()')。如果你包含()多個文件(爲什麼?),那麼你不能這樣做。 – 2011-05-20 12:34:59
當我調用一個.html文件時,它會調用資源,所有這些資源都會通過php包裝器重定向。每次腳本執行時,只需要包含一件東西,但我需要它來保留MIME類型。我是一名新用戶,因此我無法回答自己的問題,但我編輯了問題的解決方案。 – 2011-05-20 14:41:19