2010-01-24 13 views
21

Il sito Web è in esecuzione su un host Web in cui non è possibile accedere a un file .htaccess. Tuttavia, voglio fare la riscrittura degli URL per gli URL di facile utilizzo.Riscrittura dell'URL in PHP senza htaccess

ad es. URL originale

www.example.com/file?q=name 

URL previsto

www.example.com/file/name 
+0

prendi un esempio della sezione articolo di website.user invia un articolo e l'url dinamico viene generato come www.dominio-nome/articoli? Cat = 3 & id = 34 ma voglio come questo www.domain-name/articles/cat-name/nome-articolo – Vivart

risposta

16

Come altre persone hanno detto, basta usare link come /index.php/nice/looking/url.
Il "index.php" nel mezzo del URL potrebbe apparire un po 'strano, ma non credo che sia possibile avere un aspetto migliore senza .htaccess

Altrimenti, si potrebbe chiedere il vostro hoster per reindirizzare qualsiasi URL per /index.php in modo che tu possa gestire la riscrittura degli URL senza avere /index.php nel tuo URL.

Quindi è possibile utilizzare una corrispondenza regolare per rilevare il file da includere.
preg_match('@[/]{1}([a-zA-Z0-9]+)@', $_SERVER["PATH_INFO"], $matches)($ partite conterrà tutte le "parti" dell'URL di un array)

stare attenti con inclusi i file, utilizzare un whitelist così sei sicuro che nessuno sarebbe in grado di caricare i file interni .

+0

Controllare questo post, http: // che cosa è-online. info/science-and-tutorials/104/how-to-write-PHP-SEO-friendly-URLs-without-htaccess/risolverà in modo intelligente la riscrittura dell'URL utilizzando il file HTACCESS –

4

La cosa migliore sarà quello di avere gli URL di questo tipo:

www.example.com/index.php/file/name 

Avrai a riscrivere il codice PHP però.

5

come Alix Axel suggerito è possibile utilizzare

www.example.com/index.php/file/name 

poi userete $_SERVER['REQUEST_URI'] per elaborare l'URL.

+0

Meglio usare '$ _SERVER ['PATH_INFO']' invece di '$ _SERVER ['REQUEST_URI']' in questo caso. –

+0

Questa soluzione sembra buona. un problema quando sto usando www.domain-name.com/index.php/filename sembra che la directory corrente cambi e tutti i CSS che formano la navigazione persa e relativa non funziona anche. eventuali suggerimenti. di riferimento/base – Vivart

+1

aggiuntivo per il vostro ogni riferimento al file come '' anche collegare il CSS utilizzando riferimento di base 'src = "/ media/css.css"' – Pentium10

3

Se si dispone di un server Apache e AcceptPathInfo è abilitato, è possibile utilizzare l'URL scritto. Una richiesta di /file/name verrà quindi automaticamente riscritta su /file con il valore PATH_INFO di /name se /file è un file normale.

0

Prova questo

www.example.com/file?q=name

a

www.example.com/name (meglio di www.example.com/file/name)

Apri la tua .htaccess dalla cartella principale del progetto e aggiungere questo codice

Options +FollowSymLinks 

RewriteEngine On 
RewriteRule \.(js|css|jpe?g|png|gif)$ - [L] 


RewriteRule "^([ \w-]+)/?$" /file?q=$1 [L,QSA] 

Questo risolve il tuo problema. Guarda il post come rewrite URL in .htaccess

Problemi correlati