apache - mod_rewrite, questo sconosciuto :)

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven ott 27, 2006 19:32
Nome Cognome: Danilo M.
Slackware: 64 14.1
Kernel: 4.4.0
Desktop: kde4
Località: Siderno (RC)
Contatta:

apache - mod_rewrite, questo sconosciuto :)

Messaggioda danix » mer set 24, 2008 17:19

Ciao a tutti,
oggi mi è venuta la brillante idea di andare a dare un'occhiata a mod_rewrite... inutile dire che non è proprio la cosa più semplice del mondo, comunque sto leggendo varie guide...

Qualcuno di voi lo usa?? Mi interesserebbe sapere se effettivamente mi è utile riscrivere gli url del mio sito in ottica SEO...
Chiariti questi dubbi iniziali passerò a qualche domanda pratica... :D

Grazie mille a tutti...


Ciau
danix

myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
conraid
Staff
Staff
Messaggi: 12727
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda conraid » mer set 24, 2008 17:42

danix85 ha scritto:Ciao a tutti,
oggi mi è venuta la brillante idea di andare a dare un'occhiata a mod_rewrite... inutile dire che non è proprio la cosa più semplice del mondo, comunque sto leggendo varie guide...

Qualcuno di voi lo usa?? Mi interesserebbe sapere se effettivamente mi è utile riscrivere gli url del mio sito in ottica SEO...
Chiariti questi dubbi iniziali passerò a qualche domanda pratica... :D

Grazie mille a tutti...


Ciau


Sì che lo uso (sopratutto redirect e redirectmatch), ma non fare come me con slackers che sono ancora nel dubbio e cambio sempre. Decidi prima gli url in ottica seo e se possibile non usare mod_rewrite

comunque se non puoi fare a meno di scrivere qualcosa come index.php?id=pippo allora ti serve.

quello sopra per esempio potrebbe essere
redirectmatch 301 /index.php?id=(.*)$ http://tuosito/$1
che significa che ogni pagina index.php?id=pippo diventa http://tuosito/pippo

Questo è solo un banale esempio di quel che puoi fare


tieni presente che i cms stanno indirizzandosi a fare tutto lato php, anche Wordpress ha per esempio un .htaccess

Codice: Seleziona tutto

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>


che rimanda tutto a index.php che decide il permalink

per darti un'idea prima aveva una regola per ogni possibile match

Avatar utente
JohnnyMnemonic
Staff
Staff
Messaggi: 2733
Iscritto il: dom set 05, 2004 0:00
Nome Cognome: Giuseppe Palmiotto
Slackware: 14.0
Kernel: 3.5.5-thanatos
Località: Bologna
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda JohnnyMnemonic » mer set 24, 2008 19:12

Danix scusa se uso il tuo thread ma ho un problema simile e non volevo aprire un doppione

Allora a me servirebbe una soluzione, penso con .htaccess, per bloccare l'accesso diretto ai file
Mi spiego, ho degli applicativi php che permettono l'upload e la consultazione di documenti (principalmente pdf) agli utenti che si loggano
Ora io vorrei impedire che, anche solo indovinando, sia possibile accedere a tali documenti semplicemente scrivendo l'indirizzo completo nel browser

Esempio:
applicativo pubblicato su /www/mioprogramma
documenti su /www/mioprogramma/documenti

Io vorrei che si potesse accedere ai documenti solo tramite applicativo

Ho provato con .htpasswd ma non è una soluzione conveniente diciamo, e spostare i file fuori dalla directory pubblicata non posso farlo

Chi sa come fare batta un colpo!

Avatar utente
conraid
Staff
Staff
Messaggi: 12727
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda conraid » mer set 24, 2008 19:20

JohnnyMnemonic ha scritto:Ho provato con .htpasswd ma non è una soluzione conveniente diciamo


Perché no?

Avatar utente
JohnnyMnemonic
Staff
Staff
Messaggi: 2733
Iscritto il: dom set 05, 2004 0:00
Nome Cognome: Giuseppe Palmiotto
Slackware: 14.0
Kernel: 3.5.5-thanatos
Località: Bologna
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda JohnnyMnemonic » mer set 24, 2008 19:24

Perchè gli utenti già si collegano inserendo nome e password, e chiedergliene un'altra, tra l'altro pure diversa, non è il massimo purtroppo

Avatar utente
conraid
Staff
Staff
Messaggi: 12727
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda conraid » mer set 24, 2008 19:26

JohnnyMnemonic ha scritto:Perchè gli utenti già si collegano inserendo nome e password, e chiedergliene un'altra, tra l'altro pure diversa, non è il massimo purtroppo


Scusa, ho sbagliato, avevo capito .htaccess

Ma puoi usare .htaccess dicendo che quel documento è vietato chiamarli direttamente

Avatar utente
JohnnyMnemonic
Staff
Staff
Messaggi: 2733
Iscritto il: dom set 05, 2004 0:00
Nome Cognome: Giuseppe Palmiotto
Slackware: 14.0
Kernel: 3.5.5-thanatos
Località: Bologna
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda JohnnyMnemonic » mer set 24, 2008 19:31

Purtroppo sono tanti documenti in altrettante sottodirectory, creati automaticamente dall'applicativo

Avatar utente
conraid
Staff
Staff
Messaggi: 12727
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda conraid » mer set 24, 2008 20:08

JohnnyMnemonic ha scritto:Purtroppo sono tanti documenti in altrettante sottodirectory, creati automaticamente dall'applicativo


Ma tu devi bloccare tutto, tanto l'applicativo agisce a livello di filesystem immagino

Se nella directory documenti fai un .htaccess così

Codice: Seleziona tutto

Order deny,allow
Deny from all


che succede?

Avatar utente
JohnnyMnemonic
Staff
Staff
Messaggi: 2733
Iscritto il: dom set 05, 2004 0:00
Nome Cognome: Giuseppe Palmiotto
Slackware: 14.0
Kernel: 3.5.5-thanatos
Località: Bologna
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda JohnnyMnemonic » mer set 24, 2008 20:14

Così mi risponde Internal Server Error quando tento di scaricare il file con l'applicativo

Forse il problema risiede nel fatto che io accedo al file via php con

$ID=$_POST['iddocumento'];
$NOMEFILE=$_POST['nomefile'];
$FILEDASCARICARE="documenti/".$_SESSION['database']."/".$ID."/".$NOMEFILE;
header("Location: $FILEDASCARICARE ");


Ma in che altro modo potrei fare?

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven ott 27, 2006 19:32
Nome Cognome: Danilo M.
Slackware: 64 14.1
Kernel: 4.4.0
Desktop: kde4
Località: Siderno (RC)
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda danix » gio set 25, 2008 0:29

@johnny:
non è proprio lo stesso argomento, ma non c'è problema, almeno imparo qualcosa anche io... :D

@tutti:
ci capisco sempre meno... :(
il sito è già pronto, quindi di mettermi a riscrivere gli url non se ne parla... però mod_rewrite è più ostico di quanto pensassi...
ad esempio, la cosa più facile dovrebbe essere quella di nascondere il classico /index.php... giusto??
io ho gli url strutturati in questo modo:

Codice: Seleziona tutto

http://www.miosito.com/index.php?p=pagina&section=sezione

vorrei che diventasse:

Codice: Seleziona tutto

http://www.miosito.com/pagina/sezione

non è SEF così?? Solo che non riesco a farlo in nessun modo... :(

Un'altra cosa, allo stato attuale la home può essere visualizzata in 3 modi:

Codice: Seleziona tutto

1. http://www.miosito.com/
2. http://www.miosito.com/index.php
3. http://www.miosito.com/index.php?p=home

Posso fare in modo che a tutti e 3 questi indirizzi corrisponda il primo, cioè:

Codice: Seleziona tutto

http://www.miosito.com

???


Mi date qualche spunto per iniziare a capirci qualcosa?? non voglio la pappa pronta, però da solo non ci arrivo...

Spero mi aiuterete...
Grazie mille


Ciau
danix

myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
conraid
Staff
Staff
Messaggi: 12727
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda conraid » gio set 25, 2008 9:03

JohnnyMnemonic ha scritto:Così mi risponde Internal Server Error quando tento di scaricare il file con l'applicativo

Forse il problema risiede nel fatto che io accedo al file via php con

$ID=$_POST['iddocumento'];
$NOMEFILE=$_POST['nomefile'];
$FILEDASCARICARE="documenti/".$_SESSION['database']."/".$ID."/".$NOMEFILE;
header("Location: $FILEDASCARICARE ");


Ma in che altro modo potrei fare?


Prendendolo dal filesystem. Se risiedono nello stesso server perché fare così?
Quella è una richiesta http

Dovresti prendere il file e poi darlo in output, come faresti per le immagini per esempio.
però devi conoscere l'header del file
header("Content-type: image/png");
e poi il codice...

Nel tuo caso invece ti comporti come un browser, prova ad agire sui referrer

Codice: Seleziona tutto

SetEnvIfNoCase Referer "^http://www.tuodominio.com/" ok_img
SetEnvIfNoCase Referer "^http://www.tuodominio.com$" ok_img
SetEnvIfNoCase Referer "^$" ok_img
<filesmatch "\.*$">
  Order Deny,Allow
  deny from all
  Allow from env=ok_img
</filesmatch>


Cerca il tuo dominio preciso e guarda se il "match" va bene.
Oppure puoi usare allo stesso modo RewriteCond e RewriteRule, ma questo lo faccio per esempio per impedire acquisizioni da altri siti, non so se nel tuo caso funziona.

Oppure prova

Codice: Seleziona tutto

Order deny,allow
Deny from all
Allow from localhost


dove al posto di localhost ci metti, se non funziona, l'ip del server

Magari quando ho tempo faccio delle prove

Avatar utente
conraid
Staff
Staff
Messaggi: 12727
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda conraid » gio set 25, 2008 9:19

danix85 ha scritto:

Codice: Seleziona tutto

http://www.miosito.com/index.php?p=pagina&section=sezione

vorrei che diventasse:

Codice: Seleziona tutto

http://www.miosito.com/pagina/sezione

non è SEF così?? Solo che non riesco a farlo in nessun modo... :(


Prova così

Codice: Seleziona tutto

RewriteRule ^/([a-z]+)/([a-z]+)/ http://www.miosito.com/index.php?p=$1&section=$2 [NC,L]

danix85 ha scritto:Un'altra cosa, allo stato attuale la home può essere visualizzata in 3 modi:

Codice: Seleziona tutto

1. http://www.miosito.com/
2. http://www.miosito.com/index.php
3. http://www.miosito.com/index.php?p=home

Posso fare in modo che a tutti e 3 questi indirizzi corrisponda il primo, cioè:

Codice: Seleziona tutto

http://www.miosito.com


Puoi usare i redirect

Codice: Seleziona tutto

Redirect 301 /index.php$  http://www.miosito.com/
Redirect 301 /index.php?p=home$  http://www.miosito.com/


o, se non vuoi usare un redirect (che sarebbe più giusto al cambio di url di una pagina) sempre i RewriteRule

Codice: Seleziona tutto

RewriteRule ^/index.php$ http://www.miosito.com/ [NC,L]
RewriteRule ^/index.php?p=home$ http://www.miosito.com/ [NC,L]



Per le opzioni ( [NC] per esempio) guardare http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

p.s.
stai attento se qualche espressione regolare sballa, sono solo esempi scritti in fretta
Se usi
RewriteRule ^/index.php$ http://www.miosito.com/ [NC,L]
RewriteRule ^/index.php?p=home$ http://www.miosito.com/ [NC,L]
o le metti per prime, o togli l'opzione L (last) alla prima

Avatar utente
JohnnyMnemonic
Staff
Staff
Messaggi: 2733
Iscritto il: dom set 05, 2004 0:00
Nome Cognome: Giuseppe Palmiotto
Slackware: 14.0
Kernel: 3.5.5-thanatos
Località: Bologna
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda JohnnyMnemonic » gio set 25, 2008 10:15

conraid ha scritto:
JohnnyMnemonic ha scritto:...

Prendendolo dal filesystem. Se risiedono nello stesso server perché fare così?
Quella è una richiesta http

Dovresti prendere il file e poi darlo in output, come faresti per le immagini per esempio.
però devi conoscere l'header del file
header("Content-type: image/png");
e poi il codice...

Nel tuo caso invece ti comporti come un browser, prova ad agire sui referrer

Codice: Seleziona tutto

SetEnvIfNoCase Referer "^http://www.tuodominio.com/" ok_img
SetEnvIfNoCase Referer "^http://www.tuodominio.com$" ok_img
SetEnvIfNoCase Referer "^$" ok_img
<filesmatch "\.*$">
  Order Deny,Allow
  deny from all
  Allow from env=ok_img
</filesmatch>


Cerca il tuo dominio preciso e guarda se il "match" va bene.


Ok in questo modo funziona, purtoppo non posso cambiare il comportamento "da browser"...
L'unica cosa è che così non mi permette l'accesso da fuori della mia rete #-o

Non c'è un modo per dire ad esempio: "se provieni col browser dalla tal pagina accedi al file altrimenti no" ?

EDIT Ops, anzi no non funziona nemmeno così, rinnovo la mia domanda sullo pseduocodice allora

Avatar utente
conraid
Staff
Staff
Messaggi: 12727
Iscritto il: gio lug 14, 2005 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Località: Livorno
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda conraid » gio set 25, 2008 10:29

JohnnyMnemonic ha scritto:Non c'è un modo per dire ad esempio: "se provieni col browser dalla tal pagina accedi al file altrimenti no" ?


Da php lo saprei fare, da .htaccess... mmm... :-k
Eppure quel codice dovrebbe fare qualcosa di simile. Io lo uso in modo che le immagini sono visualizzabili solamente se la richiesta viena da altre pagine presenti nel sito o direttamente dal browser e non esternamente.

Ma non ti funziona cosa vuol dire?
Che vedono tutti il documento o nessuno?
Perché se lo vedono tutti togli
SetEnvIfNoCase Referer "^$" ok_img

Avatar utente
JohnnyMnemonic
Staff
Staff
Messaggi: 2733
Iscritto il: dom set 05, 2004 0:00
Nome Cognome: Giuseppe Palmiotto
Slackware: 14.0
Kernel: 3.5.5-thanatos
Località: Bologna
Contatta:

Re: apache - mod_rewrite, questo sconosciuto :)

Messaggioda JohnnyMnemonic » gio set 25, 2008 10:30

Eh no. Non lo vede proprio nessuno :|


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite