Escludere una parola da una espressione regolare

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.
Rispondi
Avatar utente
conraid
Staff
Staff
Messaggi: 13631
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Escludere una parola da una espressione regolare

Messaggio da conraid »

Non so se è la sezione giusta, mi trovo a dover escludere una parola da una espressione regolare

Ecco l'esempio

Codice: Seleziona tutto

redirectmatch 301 /packages/(.*)$ h_t_t_p://www.slackers.it/repository/$1
In pratica voglio che ogni corrispondenza di h_t_t_p://www.slackers.it/packages/* sia indirizzata a h_t_t_p://www.slackers.it/repository/*, per esempio
h_t_t_p://www.slackers.it/packages/mutt -> h_t_t_p://www.slackers.it/repository/mutt

Questo tranne h_t_t_p://www.slackers.it/packages e h_t_t_p://www.slackers.it/packages/index

Se la prima si esclude con quella regex, altrimenti avrei messo

Codice: Seleziona tutto

 redirect 301 /packages/ h_t_t_p://www.slackers.it/repository/
come ho fatto per package

Codice: Seleziona tutto

redirect 301 /package/ h_t_t_p://www.slackers.it/repository/
Devo fare questo per il cambio di directory effettuato varie volte. Sì, lo so che era meglio decidere prima, ma ormai...

Come posso escludere /packages/index da /packages/(.*)$ ?

Spero di essere riuscito a spiegare quel che voglio fare

p.s.
ho messo h_t_t_p al posto di http per non far linkare le pagine

Avatar utente
IceSlack
Linux 4.x
Linux 4.x
Messaggi: 1313
Iscritto il: dom 30 ott 2005, 13:27

Re: Escludere una parola da una espressione regolare

Messaggio da IceSlack »

e? non si capisce molto vorresti replaciare un campo con un altro?

comunque dovrai usare una replace del tuo linguaggio, con che linguaggio stai programmando lo script?

Avatar utente
paolo86
Linux 0.x
Linux 0.x
Messaggi: 73
Iscritto il: lun 14 lug 2008, 19:22
Nome Cognome: Paolo Cortis
Slackware: Slackware64 current
Kernel: 3.4.1-jiraiya
Desktop: KDE 4.8.2
Località: Cagliari
Contatta:

Re: Escludere una parola da una espressione regolare

Messaggio da paolo86 »

Stai usando gli htaccess, giusto?

Io farei così...

Codice: Seleziona tutto

RewriteCond %{REQUEST_URI} !packages
RewriteCond %{REQUEST_URI} !packages/index
RedirectMatch 301 /packages/(.*)$ h_t_t_p://www.slackers.it/repository/$1
Non so se è proprio corretto... l'ho scritto direttamente qui senza testarlo...

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

Re: Escludere una parola da una espressione regolare

Messaggio da conraid »

paolo86 ha scritto:Stai usando gli htaccess, giusto?
Sì, ora provo. Grazie

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

Re: Escludere una parola da una espressione regolare

Messaggio da conraid »

Niente, ho fatto varie prova, ma non prende l'espressione

Questa è la pagina
h_t_t_p://www.slackers.it/packages/
come vedere viene rimandata ad una inesistente repository/index

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

Re: Escludere una parola da una espressione regolare

Messaggio da conraid »

Ho tolto le righe da .htaccess per adesso

Avatar utente
paolo86
Linux 0.x
Linux 0.x
Messaggi: 73
Iscritto il: lun 14 lug 2008, 19:22
Nome Cognome: Paolo Cortis
Slackware: Slackware64 current
Kernel: 3.4.1-jiraiya
Desktop: KDE 4.8.2
Località: Cagliari
Contatta:

Re: Escludere una parola da una espressione regolare

Messaggio da paolo86 »

Ho notato solo ora che tu stai usando solo il mod_alias... :oops:
Io invece ti ho mischiato mod_alias e mod_rewrite senza accorgermene #-o
Se usi il mod_rewrite in questo modo dovrebbe funzionare (ho fatto una prova veloce e sembra funzionare):

Codice: Seleziona tutto

RewriteCond %{REQUEST_URI} !packages/$
RewriteCond %{REQUEST_URI} !packages/index
RewriteRule packages/(.*)$ repository/$1
Ciao!

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

Re: Escludere una parola da una espressione regolare

Messaggio da conraid »

No, non va.
Non mi cambia l'url

il problema dell'index è sparito, nel senso che c'era una regola

Codice: Seleziona tutto

redirectmatch 301 /(.*).html$ _http://www.slackers.it/$1
che produceva quell'index, tolta questa per esempio

Codice: Seleziona tutto

redirectmatch 301 /packages/(.*)$ h_ttp://www.slackers.it/repository/$1
funziona, solo che mi matcha anche /packages/ normale che invece non deve essere toccato :-(

Avatar utente
paolo86
Linux 0.x
Linux 0.x
Messaggi: 73
Iscritto il: lun 14 lug 2008, 19:22
Nome Cognome: Paolo Cortis
Slackware: Slackware64 current
Kernel: 3.4.1-jiraiya
Desktop: KDE 4.8.2
Località: Cagliari
Contatta:

Re: Escludere una parola da una espressione regolare

Messaggio da paolo86 »

Invece di mettere

Codice: Seleziona tutto

redirectmatch 301 /packages/(.*)$ h_ttp://www.slackers.it/repository/$1
potresti provare con questo:

Codice: Seleziona tutto

redirectmatch 301 /packages/(.+)$ h_ttp://www.slackers.it/repository/$1
Con "+" invece di "*"...

Lo "*" riconosce 0 o più volte... il "+" 1 o più volte...
in questo modo dovrebbe fare il redirect solo se c'è almeno un carattere dopo "/packages/".

Ciao!

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

Re: Escludere una parola da una espressione regolare

Messaggio da conraid »

che scemo... non ci avevo pensato.
ora provo

UPDATE
Funziona... devo mettermi a fare mezz'ora di escremiditazione al giorno per una settimana mi sa, perdo i colpi :(

A parte le battute
Grazie, un credito tra i fannulloni ;-)

UPDATE2
mi sai per caso anche dire perché se inserisco questa regola

redirectmatch 301 /(.+).html$ h_ttp://www.slackers.it/$1

con * o + è uguale, dopo anche la regola sopra non funziona e mi riproduce
h_ttp://www.slackers.it/repository/mutt/index invece di h_ttp://www.slackers.it/repository/mutt/ come fa adesso, per esempio?

Avatar utente
paolo86
Linux 0.x
Linux 0.x
Messaggi: 73
Iscritto il: lun 14 lug 2008, 19:22
Nome Cognome: Paolo Cortis
Slackware: Slackware64 current
Kernel: 3.4.1-jiraiya
Desktop: KDE 4.8.2
Località: Cagliari
Contatta:

Re: Escludere una parola da una espressione regolare

Messaggio da paolo86 »

conraid ha scritto:che scemo... non ci avevo pensato.
ora provo
Può capitare a chiunque...
Eh.. quante volte mi è successo... :roll: :lol:
conraid ha scritto: Grazie, un credito tra i fannulloni ;-)
Prego. :thumbright:

EDIT:
conraid ha scritto:UPDATE2
mi sai per caso anche dire perché se inserisco questa regola

redirectmatch 301 /(.+).html$ h_ttp://www.slackers.it/$1

con * o + è uguale, dopo anche la regola sopra non funziona e mi riproduce
h_ttp://www.slackers.it/repository/mutt/index invece di h_ttp://www.slackers.it/repository/mutt/ come fa adesso, per esempio?
Aspetta... questa non l'ho ben capita...

Rispondi