2014-05-31 4 views
-1

У меня есть URL, которыйМожно ли по-настоящему скрыть URL?

filemgr.php 

, когда пользователь переходит на более низкие уровни указанного файлового менеджера он показывает, как

filemgr.php#userfiles/username/Images 

Есть ли способ, чтобы просто иметь его показать, как

filemgr.php 

с остальным указанием URL-адреса?

Я открыт для редактирования .htaccess и php-кода.

Этот Jquery используется, чтобы показать подуровни:

function renderFileRow(data) { 

    var $link = $('<a class="name" />') 
    .attr('href', data.is_dir ? '#' + data.path : './'+data.path) 
    .text(data.name); 
    var $dl_link = $('<a/>').attr('href','?do=download&file='+encodeURIComponent(data.path)) 
    .addClass('download').text('download'); 
    var $delete_link = $('<a href="#" />').attr('data-file',data.path).addClass('delete').text('delete'); 
    var perms = []; 
    if(data.is_readable) perms.push('read'); 
    if(data.is_writable) perms.push('write'); 
    if(data.is_executable) perms.push('exec'); 
    var $html = $('<tr />') 
    .addClass(data.is_dir ? 'is_dir' : '') 
    .append($('<td class="first" />').append($link)) 
    .append($('<td/>').attr('data-sort',data.is_dir ? -1 : data.size) 
    .html($('<span class="size" />').text(formatFileSize(data.size)))) 
    .append($('<td/>').attr('data-sort',data.mtime).text(formatTimestamp(data.mtime))) 
    .append($('<td/>').text(perms.join('+'))) 
    .append($('<td/>').append($dl_link).append(data.is_deleteable ? $delete_link : '')) 
    return $html; 

} 

здесь является PHP код:

setlocale(LC_ALL,'en_US.UTF-8'); 

$tmp = realpath($_REQUEST['file']); 
if($tmp === false) 
err(404,'File or Directory Not Found'); 
if(substr($tmp, 0,strlen(__DIR__)) !== __DIR__) 
err(403,"Forbidden"); 

if(!$_COOKIE['_sfm_xsrf']) 
setcookie('_sfm_xsrf',bin2hex(openssl_random_pseudo_bytes(16))); 
if($_POST) { 
if($_COOKIE['_sfm_xsrf'] !== $_POST['xsrf'] || !$_POST['xsrf']) 
err(403,"XSRF Failure"); 
} 
$file = $_REQUEST['file'] ?: './userfiles/'.htmlentities($_SESSION['username']); 



if($_GET['do'] == 'list') { 
if (is_dir($file)) { 
$directory = $file; 
$result = array(); 
$files = array_diff(scandir($directory), array('.','..')); 
foreach($files as $entry) if($entry !== basename(__FILE__)) { 
    $i = $directory . '/' . $entry; 
$stat = stat($i); 
$result[] = array(
'mtime' => $stat['mtime'], 
'size' => $stat['size'], 
'name' => basename($i), 
'path' => preg_replace('@^\./@', '', $i), 
'is_dir' => is_dir($i), 
'is_deleteable' => (!is_dir($i) && is_writable($directory)) || 
(is_dir($i) && is_writable($directory) && is_recursively_deleteable($i)), 
'is_readable' => is_readable($i), 
'is_writable' => is_writable($i), 
'is_executable' => is_executable($i), 
); 
} 
} else { 
err(412,"Not a Directory"); 
} 
echo json_encode(array('success' => true, 'is_writable' => is_writable($file), 'results' =>$result)); 
exit; 
} elseif ($_POST['do'] == 'delete') { 
rmrf($file); 
exit; 
} elseif ($_POST['do'] == 'mkdir') { 
chdir($file); 
@mkdir($_POST['name']); 
exit; 
} elseif ($_POST['do'] == 'upload') { 
var_dump($_POST); 
var_dump($_FILES); 
var_dump($_FILES['file_data']['tmp_name']); 
var_dump(move_uploaded_file($_FILES['file_data']['tmp_name'], $file.'/'.$_FILES['file_data']['name'])); 
exit; 
} elseif ($_GET['do'] == 'download') { 
$filename = basename($file); 
header('Content-Type: ' . mime_content_type($file)); 
header('Content-Length: '. filesize($file)); 
header(sprintf('Content-Disposition: attachment; filename=%s', 
strpos('MSIE',$_SERVER['HTTP_REFERER']) ? rawurlencode($filename) : "\"$filename\"")); 
ob_flush(); 
readfile($file); 
exit; 
} 
function rmrf($dir) { 
if(is_dir($dir)) { 
$files = array_diff(scandir($dir), array('.','..')); 
foreach ($files as $file) 
rmrf("$dir/$file"); 
rmdir($dir); 
} else { 
unlink($dir); 
} 
} 
function is_recursively_deleteable($d) { 
$stack = array($d); 
while($dir = array_pop($stack)) { 
if(!is_readable($dir) || !is_writable($dir)) 
return false; 
$files = array_diff(scandir($dir), array('.','..')); 
foreach($files as $file) if(is_dir($file)) { 
$stack[] = "$dir/$file"; 
} 
    } 
    return true; 
    } 

    function err($code,$msg) { 
    echo json_encode(array('error' => array('code'=>intval($code), 'msg' => $msg))); 
    exit; 
    } 

    function asBytes($ini_v) { 
    $ini_v = trim($ini_v); 
    $s = array('g'=> 1<<30, 'm' => 1<<20, 'k' => 1<<10); 
    return intval($ini_v) * ($s[strtolower(substr($ini_v,-1))] ?: 1); 
    } 

    $MAX_UPLOAD_SIZE = min(asBytes(ini_get('post_max_size')), asBytes(ini_get('upload_max_filesize'))); 
+0

Как это приложение генерирует '# UserFiles/имя пользователя/Images' этот URL? –

+0

'$ file = $ _REQUEST ['file']?: './Userfiles /'. Htmlentities ($ _ SESSION ['username']). '/';' Мне это нужно, так что каждый пользователь может получить доступ только к собственному файлу менеджер. – user3621391

+0

Вы действительно имеете в виду привязку (#) или это опечатка? – bestprogrammerintheworld

ответ

2

Одно из решений, а не скрывает URL через Htaccess или другие средства, чтобы сделайте сайт с 1 страницей. Когда пользователь щелкает ссылку, файлы просто included на текущую страницу, и/или страница изменяется с помощью AJAX, так что пользователь никогда не покидает страницу, и URL-адрес никогда не изменяется.

Например, если кто-то нажмет на ссылку «Показать мои изображения», эта ссылка представляет собой кнопку jquery, которая выполняет функцию $.get, которая захватывает изображения и отображает их на странице, не выходя из страницы.

http://api.jquery.com/jquery.get/

+0

Выполняя 'php include'file_mgr_php.php' наверху, следует исправить это? – user3621391

+0

Не знаю вашу архитектуру вашего сайта, но я не думаю, что это то, что я предложил, сделал редактирование, чтобы ответить. – Andrew

+0

ahh gotya ... позвольте мне поиграть с этим и посмотреть, могу ли я это получить! спасибо за это! – user3621391

Смежные вопросы