通過apache設置來判斷,在這種情況下,您最好的選擇是升級到1.4.24+,否則這些重寫規則將開始變得複雜,因爲您需要指向每個存在的文件。事情是這樣的,例如:
url.rewrite = (
"^/index.php$" => "/index.php",
"^/page1.php$" => "/page1.php",
"^/page2.php$" => "/page2.php",
.
.
.
"^/pageN.php$" => "/page.php",
.
.
.
"^/uploads/uploadedfile.pdf$" => "/uploads/uploadedfile.pdf",
.
.
.
"(.*)" => "/index.php?req=$1"
)
如果您的應用程序不會有很多文件,用戶需要直接訪問你能解決這個問題跟上面。但是,一旦你開始處理上傳的內容或任何動態,你將遇到問題。
就我個人而言,我一直通過添加任何不想輕易重寫到子目錄中的內容來避免這些問題,然後您可以使用通配符(這可能或可能不適用於您的情況) :
url.rewrite = (
"^/content/(.*)$" => "/content/$1",
"(.*)" => "/index.php?req=$1"
)
如果沒有上面沒有任何用處,你可以使用PHP腳本來滿足您的所有動態內容,但這種帶有其自身的問題和缺乏靈活性。例如:
<?php
$fullPath = '/path/to/files/' . $_GET['filename'];
if(file_exists($fullPath)){
// Parse Info/Get Extension
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
// Determine Content Type
switch ($ext) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($fullPath)."\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$fsize);
} else
exit('File Not Found');
?>
希望幫助
對不起,它不工作,但我可以在我的1.4.20版本中使用這個url.rewrite-if-not-file設置(從1.4.24+重寫補丁)。你有什麼想法,這個設置有什麼好的配置?我無法取代這個lighttpd。 – user1825272