2011-08-17 11 views
5

Estoy intentando crear un mod reescribir simplemente convertir estos enlaces:simple reescritura Mod

/index.php?page=home 
/?page=home 

en

/home 

Puede alguien mostrar cómo se hace esto? Mientras estamos en el tema, ¿hay algún recurso bueno para leer sobre la modificación de mods? Mi mayor lucha hasta ahora es que no veo ninguna forma de depurarlo; las cosas funcionan o no funcionan.

Respuesta

6

Existen varias formas de hacerlo. Éste se aplica la regla a cualquier fichero que no existe:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?page=$1 [L] 

Editar: Es posible que tenga que añadir RewriteEngine on en la parte superior, y esto va en .htaccess en la raíz del servidor. Todo esto, por supuesto, depende de si su host web permite el uso de htaccess (mod_rewrite) y si el archivo de reemplazo de la regla se debe llamar .htaccess. Sin embargo, ambos son bastante comunes, por lo que no debería ser un problema.

+0

Gracias, esto es realmente lo que necesitaba, ¿a qué te refieres con "aplicar la regla a un archivo inexistente"? –

+0

¡Claro! La línea 'RewriteRule' solo se aplica si la solicitud no coincide con un archivo en el sistema de archivos (línea 1) o un directorio en el sistema de archivos (línea 2). En otras palabras, esto todavía le permite servir cualquier archivo que realmente exista y pasa todo lo demás a index.php –

+0

Oh genial, muchas gracias. –

4

Si entiendo, quiere que sus usuarios finales ingresen example.com/home y que lo hayan reescrito en /index.php?home?

RewriteEngine On 
# /home or/get redirected... 
RewriteRule ^(home)?$ /index.php?page=home [L,QSA] 

Para depurar, puede activar la RewriteLog. Sin embargo, como se sugiere en los comentarios, se debe usar solo para la depuración. Lo mejor es deshabilitarlo o establecer un nivel muy bajo en producción.

RewriteLog "/path/to/logs/rewrite.log" 
# Increase the log level (default 0, >4 gets pretty verbose) 
RewriteLogLevel 3 
+0

Muchas gracias, esto es muy útil. –

+1

Pequeña nota al margen: 'RewriteLogLevel 3' es demasiado bajo para una corrección de errores grave: le proporcionará una visión general de lo que está sucediendo sin entrar en detalles. Para ver los detalles usa el Nivel 9 - es mucho más detallado. – LazyOne

+1

Agregaría una advertencia seria a esta respuesta acerca de RewriteLog, porque puede convertirse en un recurso para los que se "olvidan" y no debería estar en niveles más altos durante largos períodos de tiempo, ya que ese archivo se convertirá en gigabytes. más rápido ... – sg3s

3
RewriteRule .*\?page=(\w+)$ /$1/ [NC] 

¿Debería hacer el truco pero quizás podría ser más específico en qué casos deben funcionar?

Aquí está una página de Internet pueden leer sobre .htaccess

http://corz.org/serv/tricks/htaccess2.php

+0

Enfoque interesante, gracias. ¿Entonces no hay necesidad de RewriteCond en este caso? –

+0

Volver a leer su pregunta después de la edición Me doy cuenta de que esto no es lo que quiere hacer ... Para las urls bonitas, consulte la respuesta de Matts. El sitio web que di todavía es un buen recurso :) – sg3s