Tengo una URL que se parece a:
url.com/picture.php?id=51
¿Cómo haría para convertir esa URL a:
picture.php/Some-text-goes-here/51
Creo que WordPress hace lo mismo.
¿Cómo hago para crear URL amigables en PHP?
php
.htaccess
url
mod-rewrite
url-rewriting
Jazerix
fuente
fuente

mod_rewritees todo lo que necesita para esto y hay muchas preguntas al respecto aquí en SO. Y si "piensas" que Wordpress hace lo mismo, ¿por qué no lo buscas ? ;)Respuestas:
Básicamente puede hacer esto de 2 maneras:
La ruta .htaccess con mod_rewrite
Agregue un archivo llamado
.htaccessen su carpeta raíz y agregue algo como esto:Esto le indicará a Apache que habilite mod_rewrite para esta carpeta, y si se le solicita una URL que coincida con la expresión regular, la reescribe internamente a lo que desea, sin que el usuario final la vea. Fácil, pero inflexible, así que si necesitas más potencia:
La ruta PHP
Ponga lo siguiente en su .htaccess en su lugar: (tenga en cuenta la barra inclinada)
Esto le indicará que ejecute su
index.phppara todos los archivos que normalmente no puede encontrar en su sitio. Ahí puedes, por ejemplo:Así es como lo hacen los sitios grandes y los sistemas CMS, porque permite mucha más flexibilidad al analizar URL, URL dependientes de configuración y base de datos, etc.
.htaccessSin embargo, para un uso esporádico las reglas de reescritura codificadas funcionarán bien.fuente
picture.php/invalid-text/51también redirigiría a la misma ubicación. También puede agregar una verificación para ver si la cadena es correcta y, de lo contrario, redirigir nuevamente a la ubicación correcta. Así es como lo hice en uno de mis sitios usando htaccess./blog/25, así como/picture/51y/download/684. Además, se considera una práctica muy mala (¡y hace que se penalice a Google PR!) Si no todas las URL generadas al azar devuelven correctamente 404.FallbackResource /index.php(tenga en cuenta la barra diagonal)FallbackResourcesolo se activan los archivos que en realidad no existen en el sistema de archivos, de ahí el retroceso . Entonces, si tiene un archivo/static/styles.cssy se refiere a él, ya quehttp://mydomain.tld/static/styles.cssel código nunca se ejecuta, lo hace funcionar como se esperaba y de manera transparente.if($elements[0] === NULL)lugar, debe usarlo , ya$elementsque aún devolverá un recuento de uno, incluso si está vacío.Si solo desea cambiar la ruta para
picture.phpluego agregar la regla de reescritura.htaccessservirá a sus necesidades, pero, si desea la reescritura de URL como en Wordpress, entonces PHP es el camino. Aquí hay un ejemplo simple para comenzar.Estructura de carpetas
Hay dos archivos que se necesitan en la carpeta raíz,
.htaccessyindex.phpsería bueno colocar el resto de los.phparchivos en una carpeta separada, comoinc/..htaccess
Este archivo tiene cuatro directivas:
RewriteEngine- habilitar el motor de reescrituraRewriteRule- denegar el acceso a todos los archivos en lainc/carpeta, redirigir cualquier llamada a esa carpeta aindex.phpRewriteCond- Permitir acceso directo a todos los demás archivos (como imágenes, CSS o scripts)RewriteRule- redirigir cualquier otra cosa aindex.phpindex.php
Como ahora todo se redirige a index.php, se determinará si la url es correcta, si todos los parámetros están presentes y si el tipo de parámetros es correcto.
Para probar la url necesitamos tener un conjunto de reglas, y la mejor herramienta para eso es una expresión regular. Al usar expresiones regulares mataremos dos moscas de un solo golpe. Url, para pasar esta prueba debe tener todos los parámetros necesarios que se prueban en los caracteres permitidos. Aquí hay algunos ejemplos de reglas.
Lo siguiente es preparar la solicitud uri.
Ahora que tenemos la solicitud uri, el paso final es probar uri en las reglas de expresión regular.
La coincidencia exitosa, ya que usamos subpatrones con nombre en expresiones regulares, llenará la
$paramsmatriz casi de la misma manera que PHP llena la$_GETmatriz. Sin embargo, cuando se utiliza una url dinámica, la$_GETmatriz se llena sin ninguna verificación de los parámetros./ picture / some + text / 51 Formación ( [0] => / imagen / algún texto / 51 [texto] => algún texto [1] => algún texto [id] => 51 [2] => 51 ) picture.php? text = some + text & id = 51 Formación ( [texto] => algún texto [id] => 51 )Estas pocas líneas de código y un conocimiento básico de las expresiones regulares son suficientes para comenzar a construir un sistema de enrutamiento sólido.
Fuente completa
fuente
Este es un archivo .htaccess que reenvía casi todo a index.php
entonces depende de usted analizar $ _SERVER ["REQUEST_URI"] y enrutar a picture.php o lo que sea
fuente
FallbackResourcedirectiva hace algunas versiones importantes, que ahora es la forma preferida de implementar este comportamiento a un costo de rendimiento más bajo, ya que no necesita lanzar todo el motor de reescritura. Documentación aquí . Sus reglas también son defectuosas porque no hace referencia a los directorios (!-d) y todos los filtros de extensión son obsoletos,-fya deberían ser detectados.PHP no es lo que estás buscando, mira mod_rewrite
fuente
Aunque ya se respondió, y la intención del autor es crear una aplicación de tipo controlador frontal, pero estoy publicando una regla literal para el problema solicitado. si alguien tiene el problema por lo mismo.
Lo anterior debería funcionar para url
picture.php/Some-text-goes-here/51. sin usar index.php como aplicación de redireccionamiento.fuente