Come riscrivere un utente da un url non riscritto a un url riscritto

Ho due URL. Uno sembra in questo modo (che è un URL non riscritto):

  1. www.example.com/article.php?id=12

E il prossimo è simile a questo (che è un URL riscritto):

  • L'agente utente Java / 1.4.1_04 si scontra (404) con alcuni jQuery / Javascript
  • errori nginx "recv () non riuscito (104: il collegamento è resettato da peer) durante la lettura dell'intestazione di risposta da"
  • Apache smette di comunicare con memcache dopo aver creato troppi vhost
  • Sicurezza di hosting condiviso
  • php rsync con exec () non funziona
  • La mia homepage di php scarica index.php invece di essere elaborata su Gandi.net
    1. www.example.com/article/12

    Entrambi gli URL funzionano. Quello che voglio sapere è se un utente visita il primo URL può essere reindirizzato automaticamente al secondo URL? Come posso raggiungere questo objective? C'è un modo per fare lo stesso solo utilizzando il file .htaccess ?

    Anche prego aiuto se volevo includere titolo anche con questo il mio url brutto assomiglia a questo.

    www.example.com/article.php?id=12&title=sometitle

    E il bel url previsto è come questo

    www.example.com/article/12/sometitle

    La regola di reindirizzamento che utilizzo è simile a questa

     RewriteRule ^article/(\d+)/([\w-]+)$ article.php?id=$1&title=$2[R=302,L] 

    Non voglio che gli utenti vedano l'url brutto anche se visita anche il brutto.

  • File system di journaling e interruzione di corrente
  • Come posso dividere un'image di unità creata con 'dd' in file separati per each partizione?
  • htaccess - Come spiegare i caratteri spaziali quando si utilizza la notazione letterale?
  • Qual è il miglior file system linux e la configuration fs per i sisthemes embedded
  • In che misura la popolarità di ReiserFS è stata ridotta da Hans Reiser?
  • Qual è il miglior file system Linux da utilizzare per MySql?
  • One Solution collect form web for “Come riscrivere un utente da un url non riscritto a un url riscritto”

    Con i reindirizzamenti come questo è necessario essere molto attenti ai loops di reindirizzamento, poiché si sta già riscrivendo internamente dall'altra parte (da /article/12 a /article.php?id=12 ). Per evitare il ciclo di reindirizzamento, puoi controllare l'URL contro la variabile server THE_REQUEST , che contiene l'intestazione iniziale di richiesta e non cambia quando l'URL viene riscritto.

    Quindi, puoi fare qualcosa di simile al seguente, vicino alla parte superiore del file .htaccess , prima della riscrittura interna .

     RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /([\w-]+)\.php\?id=(\d+)\ HTTP RewriteRule ^[\w-]+\.php$ /%1/%2? [R=302,L] 

    (Modificare il 302 (temporaneo) a un reindirizzamento 301 (permanente) quando sei sicuro che funziona correttamente.

    Il ? alla fine della sostituzione RewriteRule è necessario per rimuovere la query originale dalla richiesta. (In alternativa, è ansible utilizzare la flag QSD su Apache 2.4+)

    Il model RewriteRule è solo un controllo rapido per assicurarci di elaborare solo URL che sembrano quelli che vogliamo targetizzare. Le backreferenze %1 e %2 riferiscono al CondPattern .

    Il model [\w-]+ corrisponde all'articolo "nomi" che contengono i caratteri di parola az , AZ , 09 , _ e - . Se i nomi degli articoli sono solo a minori az modificare questo pattern a [az]+ . È meglio essere più restrittivi con la regex.

    Allo stesso modo \d+ corrisponde a qualsiasi numero di cifre ( 09 ).

    UPDATE # 1: Sembra (dai commenti) che "articolo" è la parola letterale, piuttosto che una parola che rappresenta un qualsiasi articolo. In tal caso, le direttive summenzionate possono essere semplificate:

     RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /(article)\.php\?id=(\d+)\ HTTP RewriteRule ^article\.php$ /%1/%2? [R=302,L] 

    AGGIORNAMENTO # 2: per incorporare un titolo, puoi semplicemente estendere l'esempio precedente (anche se non so perché dovresti fare questo). Quindi, per redirect da /article.php?id=12&title=some-title a /article/12/some-title , puoi fare qualcosa di simile:

     RewriteCond %{THE_REQUEST} ^[AZ]{3,9}\ /(article)\.php\?id=(\d+)&title=([\w-]+)\ HTTP RewriteRule ^article\.php$ /%1/%2/%3? [R=302,L] 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.