2010-01-24 21 views
21

El sitio web se está ejecutando en un host web en el que no tenemos acceso a un archivo .htaccess. Sin embargo, quiero hacer la reescritura de URL para URL fáciles de usar.Reescritura de URL en PHP sin htaccess

p. Ej. URL original

www.example.com/file?q=name 

URL esperada

www.example.com/file/name 
+0

simplemente tome un ejemplo de sección del artículo del sitio web.el usuario envía un artículo y se genera una URL dinámica como www.dominio-nombre/artículos? Cat = 3 & id = 34 pero quiero esto.domain-name/articles/cat-name/article-name – Vivart

Respuesta

16

Como dijeron otras personas, solo use enlaces como /index.php/nice/looking/url.
El "index.php" en el medio de la URL puede tener un aspecto un poco extraño, pero no creo que sea posible para que se vea mejor sin .htaccess

Si no, puede preguntar a su proveedor de alojamiento para redirigir cualquier URL a /index.php para que pueda manejar la reescritura de URL sin tener /index.php en su URL.

Luego puede usar una coincidencia de expresiones regulares para detectar qué archivo incluir.
preg_match('@[/]{1}([a-zA-Z0-9]+)@', $_SERVER["PATH_INFO"], $matches)($ coincidencias contendrán todas las "partes" de la dirección URL en una matriz)

tener cuidado con los archivos incluidos, utilizan una lista blanca por lo que está seguro de que nadie sería capaz de cargar archivos internos .

+0

Comprobar este post, http: // cuál es-línea. info/science-and-tutorials/104/how-to-write-PHP-SEO-friendly-URLs-without-htaccess/resolverá inteligentemente su reescritura de URL utilizando el archivo HTACCESS –

4

Lo mejor será tener direcciones URL como esta:

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

Usted va a volver a escribir el código PHP sin embargo.

5

como Alix Axel sugirió que puede utilizar

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

entonces usted va a utilizar $_SERVER['REQUEST_URI'] para procesar la URL.

+0

Mejor uso '$ _SERVER ['PATH_INFO']' en lugar de '$ _SERVER ['REQUEST_URI']' en este caso. –

+0

Esta solución se ve bien. Un problema cuando uso www.domain-name.com/index.php/filename parece que el directorio actual cambia y todos los formatos css perdidos y la navegación relativa tampoco funciona. cualquier sugerencia. – Vivart

+1

Agregar referencia/base para su archivo de cada referencia como '' también vincular el CSS mediante el uso de referencia de base 'src = "/ media/css.css"' – Pentium10

3

Si tiene un servidor Apache y AcceptPathInfo está habilitado, puede usar la URL que escribió. Una solicitud de /file/name se reescribirá automáticamente en /file con el valor PATH_INFO de /name si /file es un archivo normal.

0

Prueba este

www.example.com/file?q=name

a

www.example.com/name (mejor que www.example.com/file/name)

Abra su .htaccess de su carpeta raíz del proyecto y añadir el código

Options +FollowSymLinks 

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


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

Esto resuelve su problema. Vea la publicación cómo rewrite URL in .htaccess

Cuestiones relacionadas