2012-11-14 192 views
1

我用這個規則在我們的Apache網絡服務器:阿帕奇重寫的lighttpd改寫

RewriteCond %{REQUEST_FILENAME} !-*\.jpg$                                         
RewriteCond %{REQUEST_FILENAME} !-f                                          
RewriteCond %{REQUEST_FILENAME} !-d                                          
RewriteRule ^(.*)$ /index.php?req=$1 [QSA] 

你能幫我,我怎麼能這個遷移到1.4.20的lighttpd + url_rewrite-ifnotfile

我發現了類似的herehere,但我無法使用它。

回答

0

通過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'); 
?> 

希望幫助

+0

對不起,它不工作,但我可以在我的1.4.20版本中使用這個url.rewrite-if-not-file設置(從1.4.24+重寫補丁)。你有什麼想法,這個設置有什麼好的配置?我無法取代這個lighttpd。 – user1825272

1

按我的反應here請使用下列內容:(我已經修改了重寫,以滿足您的要求):

url.rewrite-if-not-file = (
    "^(.*)$" => "/index.php?req=$1" 
)