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):

  • XDEBUG / PHP non espelle il profilo anche se impostato correttamente?
  • Come aggiungere il supporto Postgres a PHP installato da Homebrew?
  • imansible spegnere expose_php in ubuntu 14.04 con nginx e php-fpm
  • php-fpm: contribuisce a comprendere start_servers, min_spare_servers, max_spare_servers
  • Permetti solo la richiesta GET con htaccess?
  • Il modo migliore per installare più versioni di Apache, PHP e MySQL in un singolo host FreeBSD
    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.

  • È ansible e come montare un disco AIX in Linux?
  • Relax Linux - è solo io! (permessi del filesystem)
  • Come posso rimuovere le intestazioni HTTP con .htaccess in Apache?
  • Perché non puoi fsck una partizione montata?
  • Crea sottodominio VHost & Forward ad esso
  • È la materia in quali regole di ordine sono collocate in htaccess?
  • 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.