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_rewrite
es 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
.htaccess
en 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.php
para 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.
.htaccess
Sin embargo, para un uso esporádico las reglas de reescritura codificadas funcionarán bien.fuente
picture.php/invalid-text/51
tambié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/51
y/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)FallbackResource
solo 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.css
y se refiere a él, ya quehttp://mydomain.tld/static/styles.css
el código nunca se ejecuta, lo hace funcionar como se esperaba y de manera transparente.if($elements[0] === NULL)
lugar, debe usarlo , ya$elements
que aún devolverá un recuento de uno, incluso si está vacío.Si solo desea cambiar la ruta para
picture.php
luego agregar la regla de reescritura.htaccess
servirá 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,
.htaccess
yindex.php
sería bueno colocar el resto de los.php
archivos 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.php
RewriteCond
- Permitir acceso directo a todos los demás archivos (como imágenes, CSS o scripts)RewriteRule
- redirigir cualquier otra cosa aindex.php
index.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
$params
matriz casi de la misma manera que PHP llena la$_GET
matriz. Sin embargo, cuando se utiliza una url dinámica, la$_GET
matriz se llena sin ninguna verificación de los parámetros.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
FallbackResource
directiva 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,-f
ya 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