Newsgroup: it.comp.www.php
Titolo: Creare permalink

Salve,
sto lavorando su un sito che pubblica spesso delle news. Vorrei
sostituire l'indirizzo con il titolo della news, un po' come succede
con wordpress.
Mi sono letto le guide sul mod rewrite di apache, ma non ho capito una
cosa.
Se ho 100 news devo scrivere 100 regole?
Nel senso:
sostituisci prima_news   con    news.php?leggi=1
sostituisci seconda_news    con    news.php?leggi=2
sostituisci terza_news   con     news.php?leggi=3
In questo modo se arrivo a una grande quantità di articoli, non
rallenta le prestazioni considerando che fa più di mille visite al
giorno?

 Se ho 100 news devo scrivere 100 regole?
Se vuoi usare mod_rewrite per cambiare gli indirizzi allora sì.
Se invece vuoi usare PHP, che è anche in tema col ng, cambi l'URI in 
modo che il percorso diventi un argomento per uno script in PHP e lavori 
lì.
Riguardo le prestazioni si dovrebbe vedere se eseguire lo script in PHP 
sia meno oneroso che analizzare le direttive di mod_rewrite.


No, nel .htaccess usi una regexp, nel tuo caso che prenda tutto quello
qualcosa che dica:
la richiesta del tipo 
www.tuosito.it/articoli/titolo-articolo-1
,
vedila come news.php?leggi=titolo-articolo-1
Ti posterei anche il codice ma le regexp sono l'unica cosa che non
sono ancora riuscito a imparare ;)

 lì.
eh?!
Ma sei serio!?
Secondo te tutti i blog e portali fatti con wp/joomla/drupal hanno
nel .htaccess una riga per ogni contenuto?!
Questo è alla base dell'istallazione di drupal, ad esempio:
  # Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} !=/favicon.ico
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

Si appunto volevo sapere se in php esisteva un modo per snellire la
cosa.
Mi sai dire che funzioni devo usare?
Sono andato a leggermi la documentazione delle url functions (http://
www.php.net/manual/en/ref.url.php
) ma non ho trovato niente che faccia
al caso mio.
Grazie

 Grazie
Guarda che la cosa si ferma lato apache, php c'entra poco o niente,
nel senso che non deve fare niente di strano, rispetto al suo normale
utilizzo.
Allora, mettiamo che hai 3 news, con titolo pippo, pluto e paperino.
tu vuoi che gli url diventino
example.com/news/pippo/
example.com/news/pluto/
example.com/news/paperino/
Usi il mod_rewrite in modo che apache interpreti gli url sopra e per
ognuno, rispettivamente, 'veda' invece una chiamata al file index.php
(o quello che ti pare):
example.com/index.php?n=pippo
example.com/index.php?n=pluto
example.com/index.php?n=paperino
Tu in index.php semplicemente raccogli $_GET['n'], prendi la news dal
db e fai quel che devi fare.
Una volta che hai settato ad hoc apache e mod_rewrite, i link non
dovrai più stamparli con ?n=$titoloNews ma come /news/$titoloNews:
<a href="/index.php?n=<?php echo $titoloNews; ?>">Pippo</a> (prima)
<a href="/news/<?php echo $titoloNews; ?>">Pippo</a> (dopo)
Logicamente, dovrai stare attento che il titolo della news, che
diventerà poi un url, contenga solo caratteri ammessi e comodi da
utilizzare (cioè, rimuovi gli spazi e sostituiscili con dei '-').
Per questo, wp e gli altri cms solitamente mettono in un campo
separato l'url che vuoi che la news abbia

Ho capito il funzionamento del giochino, pero il problema è che io ho
una news co un titolo del genere "L'avvocato ha ammazzato la moglie"
e ID = 34
Nella pagina di visualizzazione della news io controllo l'id della
news per visualizzarla.
Potrei usare anche il titolo ma l'avvocato contiene un apostrofo, come
faccio a gestirlo?
Cioè... tolgo l'apostrofo per creare l'indirizzo amico, ma poi quando
lo vado a rileggere come faccio a sapere che lì c'è un apostrofo?

 separato l'url che vuoi che la news abbia
giusto, ed a proposito l'op deve verificare che il permalink appena creato
non sia gi� presente nel database(e nel casoi appendere un numero, ad
esempio), altrimenti si perde qualche articolo per strada.
Per essere sicuro di non sbagliare consiglio di mettere il campo che
contiene il permalink come unique key.
ciao

 caratteri non ammessi con "_" o "-" 
questa era:
si devono sotituie gli spazi, gli accenti ed altri  caratteri non ammessi
con "_" o "-" 

 lo vado a rileggere come faccio a sapere che lì c'è un apostrofo?
Si, i cms fanno esattamente così, o meglio, come ti dicevo, utilizzano
un campo a parte per l'url desiderato (url alias), che viene suggerito
di default in base al titolo del contenuto, ma solitamente è anche
editabile dall'utente.
Esempio con un titolo del tipo: L'avvocato ha ammazzato la moglie, e
ne è molto "soddisfatto"
Url alias: l-avvocato-ha-ammazzato-la-moglie-e-ne-e-molto-soddisfatto
Solitamente vengono lasciate solo lettere e numeri negli url, tutto il
resto eliminato o sostituito da un trattino, e l'url viene tranciato
dopo un tot di caratteri (mi sembra 80, ma potrei sbagliare)
Gli spazi ad esempio potresti anche usarli, ma verrebbero poi
codificati in %20.

Dimenticavo: se vuoi puoi comunque utilizzare l'id che sicuramente è
più affidabile per identificare la news, ti basta prevedere degli url
del tipo
example.com/news/34/titolo-news
E utilizzi solo l'id (34), il titolo lo lasci li per motivi di seo
Insomma, te la puoi gestire come preferisci;
L'importante è che gli url alias non contengano caratteri che possano
dare problemi, e se ci fai affidamento per identificare la news a
database, devi assicurarti che siano unici (quindi utilizzare un campo
a parte piuttosto che massacrare ogni volta il titolo con delle regexp
è la cosa più opportuna)

Ok grazie a tutti siete grandi.

 nel .htaccess una riga per ogni contenuto?!
Non hai letto il mio messaggio oppure hai voluto capire chissà cosa.

 Non hai letto il mio messaggio oppure hai voluto capire chissà cosa.
Bhè leggendo "Se vuoi usare mod_rewrite per cambiare gli indirizzi
allora sì. " alla domanda "Se ho 100 news devo scrivere 100 regole? "
io l'ho interpretata così, effetivamente la continuazione era in
contrasto con la prima frase.. vabbhè dai ci siamo capiti male, amici
come prima ;)