2013-11-14 36 views
1

它做什麼?重寫htaccess的行爲或從URL訪問文件的不同解決方案

  1. 以PDF文件的所有請求都由 htaccess的重定向到validation.php
  2. validation.php取日誌。
  3. validation.php驗證用戶是否登錄。
  4. 如果未登錄,則將用戶踢出。如果登錄,則顯示PDF 文件。

問題:顯然第4步(如果登錄然後顯示PDF文件)失敗,因爲htaccess的的行爲。

問題:我該如何解決這個問題?

由於

htaccess的:

RewriteEngine On 
RewriteCond %{REQUEST_URI} \.(pdf)$ [NC] 
RewriteRule ^(.*)$ /validate.php?filename=$1 [L] 

validation.php:

//STEP 1) Take a log 
$file = 'log.txt'; 
$current = file_get_contents($file); 
$current .= (isset($_GET['filename'])) ? $_GET['filename'] : '?'; 
$current .= " --- " . date('H:i:s') . "\n"; 
file_put_contents($file, $current); 


//STEP 2) Authenticate login 
session_start(); 

if (! isset($_SESSION['user'])) 
{ 
    session_write_close(); 
    header ('Location: /login.php'); 
    exit(); 
} 
else 
{ 
    //User should be eble to see the PDF file now. 
} 
+0

第4步是2件事,什麼是失敗? –

+0

對不起。如果用戶未登錄,則不顯示PDF文件。 – BentCoder

回答

2

//User should be eble to see the PDF file now.步驟,而不是用戶只需重定向到pdf文件,輸出文件。所以像這樣:

$file = $_GET['filename']; 
$filename = basename($file); 

header('Content-type: application/pdf'); 
header('Content-Disposition: inline; filename="' . $filename . '"'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: ' . filesize($file)); 
header('Accept-Ranges: bytes'); 

@readfile($file); 
+0

謝謝。這有很大幫助。雖然沒有多餘。現在我應該嘗試找到一種獲取整個URL的方式,因爲URL總是不同的,不僅僅是文件名。你知道我該怎麼做。 – BentCoder

+0

解決了謝謝。 – BentCoder

相關問題