PDA

View Full Version : [HTACCESS] Redirect via HTACCESS dei soli files


magonicola
26-12-2011, 18:32
Salve,

ho un problema che mi assilla da tempo e per il quale non riesco a trovare alcuna soluzione.

Ho un sito ( http://unina.stidue.net ) che viene gestito con un semplice directory listing di apache "abbellito" con le apposite direttive tramite file di testata e pie di pagina e css esterni.
Per ora tutte le cartelle e i files si comportano come un banale directory listing (a parte quelle nascoste dall'index ignore) mentre io vorrei che i files, e solo loro (NON le directory) venissero serviti da uno script PHP che facesse un controllo via CAPTCHA prima di mandare lo stream del file.
Ciò premesso, mi servirebbe una condizione nell'HTACCESS che possa effettuare trasformazioni del tipo:


http://unina.stidue.net/ - http://unina.stidue.net/ (Resta Uguale)

http://www.unina.stidue.net/folder1/ - http://www.unina.stidue.net/folder1/ (Resta Uguale)

http://unina.stidue.net/fold1/fold2/ - http://unina.stidue.net/fold1/fold2/ (Resta Uguale)

http://unina.stidue.net/folder1/file1.ext - http://unina.stidue.net/include/fmanager.php?file=/folder1/file1.ext

http://www.unina.stidue.net/fold1/fold2/file2.ess - http://www.unina.stidue.net/include/fmanager.php?file=/fold1/fold2/file2.ess


Per adesso il mio htaccess è qualcosa del genere


RewriteEngine On

Options Indexes FollowSymLinks
IndexOptions Charset=UTF-8
IndexOptions +FancyIndexing
IndexOptions +VersionSort
IndexOptions +HTMLTable
IndexOptions +FoldersFirst
IndexOptions +IconsAreLinks
IndexOptions +IgnoreCase
IndexOptions +SuppressDescription
IndexOptions +SuppressHTMLPreamble
IndexOptions +XHTML
IndexOptions +IconWidth=16
IndexOptions +IconHeight=16
IndexOptions +NameWidth=55
IndexOrderDefault Ascending Name
HeaderName /include/header.html
ReadmeName /include/footer.html

IndexIgnore /include
IndexIgnore */.htaccess
IndexIgnore /COPYING
IndexIgnore /README.md
IndexIgnore /vhost.conf
IndexIgnore /favicon.gif
IndexIgnore /favicon.ico
IndexIgnore /img
IndexIgnore /contribuisci
IndexIgnore /google898fc143c2921769.html
IndexIgnore /robots.txt
IndexIgnore /sitemap.xml
IndexIgnore /sitemap.xsl
IndexIgnore /y_key_70f072abda42ab66.html
IndexIgnore /e72
IndexIgnore /c7
IndexIgnore /wf
IndexIgnore SSS*

AddIcon /include/icons2/type_application.png .exe .app .EXE .APP
AddIcon /include/icons2/type_binary.png .bin .hqx .uu .BIN .HQX .UU
AddIcon /include/icons2/type_box.png .tar .tgz .tbz .tbz2 bundle .rar .TAR .TGZ .TBZ .TBZ2
AddIcon /include/icons2/type_rar.png .rar .RAR
AddIcon /include/icons2/type_html.png .htm .html .HTM .HTML
AddIcon /include/icons2/type_code.png .htx .htmls .dhtml .phtml .shtml .inc .ssi .c .cc .css .h .rb .js .rb .pl .py .sh .shar .csh .ksh .tcl .as
AddIcon /include/icons2/type_database.png .db .sqlite
AddIcon /include/icons2/type_disc.png .iso .image
AddIcon /include/icons2/type_document.png .ttf
AddIcon /include/icons2/type_excel.png .xlsx .xls .xlm .xlt .xla .xlb .xld .xlk .xll .xlv .xlw
AddIcon /include/icons2/type_flash.png .flv
AddIcon /include/icons2/type_illustrator.png .ai .eps .epsf .epsi
AddIcon /include/icons2/type_pdf.png .pdf .PDF
AddIcon /include/icons2/type_php.png .php .phps .php5 .php3 .php4 .phtm
AddIcon /include/icons2/type_photoshop.png .psd
AddIcon /include/icons2/type_monitor.png .ps
AddIcon /include/icons2/type_powerpoint.png .ppt .pptx .ppz .pot .pwz .ppa .pps .pow
AddIcon /include/icons2/type_swf.png .swf
AddIcon /include/icons2/type_text.png .tex .dvi
AddIcon /include/icons2/type_vcf.png .vcf .vcard
AddIcon /include/icons2/type_word.png .doc .docx
AddIcon /include/icons2/type_zip.png .Z .z .tgz .gz .zip
AddIcon /include/icons2/type_globe.png .wrl .wrl.gz .vrm .vrml .iv
AddIcon /include/icons2/type_android.gif .apk .APK

AddIconByType (TXT,/include/icons2/type_text.png) text/*
AddIconByType (IMG,/include/icons2/type_image.png) image/*
AddIconByType (SND,/include/icons2/type_audio.png) audio/*
AddIconByType (VID,/include/icons2/type_video.png) video/*
AddIconByEncoding (CMP,/include/icons2/type_box.png) x-compress x-gzip

AddIcon /include/icons2/back.png ..
AddIcon /include/icons2/information.png README INSTALL
AddIcon /include/icons2/type_folder.png ^^DIRECTORY^^
AddIcon /include/icons2/blank.png ^^BLANKICON^^

DefaultIcon /include/icons2/type_document.png

order allow,deny
allow from all

ErrorDocument 400 /include/400.html
ErrorDocument 401 /include/400.html
ErrorDocument 403 /include/403.html
ErrorDocument 404 /include/400.html

RewriteRule ^(.+)/(.+).(.+)$ include/fmanager.php [L]


ma non riesco ad ottenere il comportamento desiderato.
In particolare non riesco ad effettuare la distinzione tra directory e file e non riesco a rendere la directory /include/ e i file di utilità (tutti quelli della root che risultano nascosti, per esempio) "immuni" al trattamento htaccess.
Qualcuno può darmi una mano?
Grazie mille.

Kenger
26-12-2011, 23:15
Devi usare le RewriteCondition seguite dalle RewriteRule. Nel tuo caso la condizione è qualcosa tipo:
RewriteCond %{REQUEST_FILENAME} -f
Che controlla se è un file ( metti -d per le directory) e di solito uso
RewriteRule ^(include)/*$ - [L]
per escludere una cartella.

Quindi direi

RewriteRule ^(include)/*$ - [L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)/(.+).(.+)$ include/fmanager.php ?q=$1/$2.$3 [L,QSA]


Tutta roba non provata.

magonicola
27-12-2011, 15:45
Grazie mille, ho risolto grazie ad un altro utente, affinando il tuo codice.
A chi dovesse servire una cosa simile, la soluzione usata è la seguente:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} !^/index\.
RewriteCond %{REQUEST_URI} !^/include/
RewriteRule (.*) /include/fmanager.php?file=$1 [R=301,L]

dove ho escluso tutti i possibili index.ext e la cartella di utilità "include"

GRAZIE!