2009-06-24 17 views
11

Sto cercando di implementare la riscrittura degli URL nella mia applicazione PHP. Qualcuno può condividere una procedura passo passo di implementare la riscrittura degli URL in PHP e MySQL?Come eseguire la riscrittura dell'URL in PHP?

Nella mia applicazione Voglio realizzare dopo la riscrittura degli URL, voglio riorientare

1. http://example.com/videos/play/google-io-2009-wave-intro 
2. http://example.com/videos/play/203/google-io-2009-wave-intro 

a

1. http://example.com/videos/play.php?title=google-io-2009-wave-intro 
2. http://example.com/videos/play.php?id=203 

dirmi come implementare sia la riscrittura degli URL in uno qualsiasi dei modo sopra.

Un'ultima cosa che l'URL sarà migliore in base a SEO, gestione, punto di vista dell'applicazione dei seguenti due tipi.

1. http://example.com/videos/play/google-io-2009-wave-intro 
2. http://example.com/videos/play/203/google-io-2009-wave-intro 
+0

Penso che questo sia stato chiesto prima. Guarda [qui] (http://stackoverflow.com/questions/836917/htaccess-and-seo-friendly-urls/836958#836958) la mia soluzione completa per questo. –

+0

[Qui] (http://net.tutsplus.com/tutorials/other/a-deeper-look-at-mod_rewrite-for-apache/) è un buon tutorial da [Nettuts] (http: //www.nettuts .com) su mod_rewrite. – Xaisoft

risposta

23

A Beginner's Guide to mod_rewrite.

In genere questo non sarà altro che abilitare il modulo mod_rewrite (probabilmente lo hai già abilitato con il tuo host) e quindi aggiungere un file .htaccess nella tua directory web. Una volta che l'hai fatto, ti mancano solo poche righe. Il tutorial sopra riportato si prenderà cura di te.

Solo per divertimento, ecco un file .htaccess Kohana per la riscrittura:

# Turn on URL rewriting 
RewriteEngine On 

# Installation directory 
RewriteBase /rootDir/ 

# Protect application and system files from being viewed 
RewriteRule ^(application|modules|system) - [F,L] 

# Allow any files or directories that exist to be displayed directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# Rewrite all other URLs to index.php/ 
RewriteRule .* index.php/$0 [PT,L] 

Che cosa farà è prendere tutte le richieste e le canale attraverso il file index.php. Quindi, se hai visitato www.examplesite.com/subjects/php, potresti effettivamente visitare www.examplesite.com/index.php?a=soggetti & b = php.

Se trovi questi URL interessanti, ti incoraggio a fare un ulteriore passo avanti ea verificare MVC Framework (Modello, Visualizza, Controller). Esso permette in sostanza di trattare il vostro sito web come un gruppo di funzioni:

www.mysite.com/jokes~~V~~3rd

public function jokes ($page = 1) { 
    # Show Joke Page (Defaults to page 1) 
} 

Oppure, www.mysite.com/scherzi/2

public function jokes ($page = 1) { 
    # Show Page 2 of Jokes (Page 2 because of our different URL) 
} 

Si noti come la prima barra chiama una funzione, e tutto ciò che seguono riempire i parametri di tale funzione. È davvero molto bello e rende lo sviluppo web molto più divertente!

+0

Inoltre, prova a riscrivere l'URL con .HTACCESS http://whats-online.info/science-and-tutorials/105/URL-rewriting-in-PHP-using-htaccess-example/ –

1

Dopo aver letto commenti e domande ancora una volta, mi sono reso conto che la mia risposta precedente non è completamente la cosa che stai cercando. Quindi ecco alcune aggiunte, se si desidera riscrivere/reindirizzare/proxy gli indirizzi URL così, ad esempio, quindi tipi di utenti www.f1.com vedrà effettivamente www.f2.com, ma il dominio rimarrà lo stesso, probabilmente è necessario impostare un reverse proxy usando Apache per quello. Agisce in modo simile a mod_rewrite.

Per quanto riguarda la seconda parte, dal momento che il crawler moderno esegue anche l'analisi del collegamento URL, penso che la prima opzione sia una migliore prestazione.

risposta precedente:
E utilizzando PHP è possibile ottenere il reindirizzamento come:

<?php 
// Here you can parse the current location 
// and decide whenever you want to go 
// if $_SERVER[ 'PHP_SELF'] some conditions then.... 
header('Location: http://www.example.com/'); 
?> 

Da php.net. Here altri esempi.

+0

Hai capito correttamente la domanda? – Prashant

+1

Secondo la tua domanda, c'è una buona possibilità che io non lo sia. Quindi forse vale la pena di dare qualche chiarimento. Hai chiesto come puoi reindirizzare usando PHP, ti mostro un esempio, è solo hardcoded, ma puoi fare un'analisi prima di scrivere l'intestazione e solo allora prendere una decisione. –

+0

Ok, potresti essere frainteso a causa del reindirizzamento, comunque, sto cercando la riscrittura dell'URL che significa che se l'utente inserisce l'URL nel browser come http://example.com/video/play/203/kjhjkhkjh allora internamente dovrebbe chiamare play .php per ottenere la risposta. che si chiama riscrittura. – Prashant

7

Non è possibile farlo con PHP da solo. Dovrai cercare in mod_rewrite (assumendo che tu stia usando Apache).

+0

Sì, lo sto usando. – Prashant

+0

@jeroen non puoi farlo solo con php perché è Apache che guida gli url e apache proverà a ottenere la risorsa richiesta perché questo mod_rewrite ti permetta di riscrivere gli URL. Detto questo, hai bisogno di un altro livello oltre a php per fare in modo che questo –

+0

realizzi semplicemente ... puoi farlo come index.php/mi-page, index.php/my-page-2 ma hai ancora index.php in url e l'obiettivo qui è rimuoverlo –

1

Mi spiace non avervi fornito una spiegazione dettagliata, ma forse potreste dare un'occhiata a DokuWiki per un punto di partenza.

Nella sua configurazione accetta 3 modalità:

  1. gli URL regolari:? Id = zzz
  2. .htaccess riscrivere: usa apache a fare il rewritting interna riscrittura
  3. (PHP): gli URL finiscono come http://www.example.com/kb/doku.php/start

È gratuito, quindi è sufficiente scaricare e sfogliare il codice.

Come nota, il reindirizzamento di Apache è molto probabilmente la soluzione migliore, ma il php puro è anche interessante nel caso in cui il codice verrà eseguito nei server IIS6 in cui la riscrittura non è facile come in Apache.

1

Sfortunatamente, è davvero compito del server web, non di PHP. A seconda se usi Apache o qualcos'altro, deve farlo prima dell'esecuzione dello script. Io uso mod_rewrite, ed una regola di riscrittura esempio si presenta:

<Directory "/home/www/html"> 
    RewriteEngine On 
    RewriteBase/
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteCond %{REQUEST_FILENAME} !-d 
     RewriteRule ^(.*)$ /index.php/%{REQUEST_URI} [PT,L] 
</Directory> 

La regola di cui sopra dice in sostanza se l'URL è un percorso valido a un file o una directory vera, caricarlo. Altrimenti, eseguilo tramite index.php.

2

Se il server lo supporta (apache/mod_rewrite), è possibile utilizzare un file .htaccess per reindirizzare il visitatore.

Qualcosa di simile (solo un progetto, adattare alle proprie esigenze ...):

RewriteEngine On 
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)/([-0-9a-zA-Z]+)/?$ /$1/$2.php?id=$3 [L] 

per il secondo esempio.

6

Utilizzando mod rewrite:

RewriteRule ^videos/play/([0-9]+)/([^.]+)$ play.php?id=$1&name=$2 

example.com/play.php?id=203 & name = google-io-2009-wave-intro

avrebbe funzionato come

esempio .com/video/play/203/google-io-2009-wave-intro

3

Ricordare che il reindirizzamento non è la stessa cosa della riscrittura.

Un reindirizzamento si verifica quando il server riceve la richiesta e la risposta viene inviata come reindirizzamento. Ad esempio, richiedi una pagina www.example.com/page. Quando il server riceve questo, la pagina o il server autonomamente invia un comando di reindirizzamento al browser. Il comando di reindirizzamento dice fondamentalmente "vai qui: nuova pagina". In PHP, questo è sotto forma di intestazione ('Location: newpage.html');

Una riscrittura è quando il server riceve la richiesta dal browser, quindi cerca in un elenco di espressioni regolari corrispondenti per quel sito. Se viene trovata una corrispondenza, l'URL viene riscritto in tale modulo e viene risposto di conseguenza.Ad esempio, l'URL richiesto www.example.com/specificpage potrebbe essere riscritto (sul lato server) come www.example.com/?loadpage=specificpage. Il browser non riceve mai le informazioni di intestazione affermando che deve andare da qualche altra parte.

1

È possibile avvicinarsi in modo leggermente diverso ai suggerimenti sopra riportati utilizzando un controller anteriore, è una soluzione comune per creare URL personalizzati e viene utilizzato in tutte le lingue, non solo in PHP. Ecco una guida: http://www.oreillynet.com/pub/a/php/2004/07/08/front_controller.html

In sostanza si dovrebbe creare un file index.php che viene chiamato per ogni URL, il suo lavoro è analizzare l'URL e determinare quale codice eseguire in base al contenuto dell'URL. Quindi, per esempio un utente userebbe un URL come http://example.com/index.php/videos/play/203/google-io-2009-wave-intro e index.php estrarrebbe gli elementi rimanenti dall'URL (/ videos/play/203/google-io-2009-wave-intro) prendi la prima parte, carica un file php con quel nome (video.php o puoi usarlo play.php) e passare attraverso i parametri 203 e google-io.

E 'effettivamente facendo la stessa cosa come riscrivere il codice in mod_rewrite ma ha un paio di vantaggi:

  1. Non richiede troppo codice mod_rewrite se siete nuovi a questo.
  2. ti permette di mettere tutto il codice di sicurezza in un unico luogo - in index.php
  3. E 'facile cambiare gli URL e gestire 404s ecc

È possibile rimuovere index.php dal URL utilizzando mod_rewrite, vedere qui: http://www.wil-linssen.com/expressionengine-removing-indexphp/

Problemi correlati