2011-03-28 29 views
5

Esto funciona:¿Limpiar URL para consulta de búsqueda?

HTML

<a href="/search/querystring">query</a> 

.htaccess

RewriteRule ^search/([-0-9a-z]+)$ /search.php?q=$1 [L] 

Yendo a través de un formulario de búsqueda:

<form method="get" action="/search"> 
<input type="search" name="q" value="querystring" /> 
<input type="submit" /> 
</form> 

¿Es esto posible con .htaccess o tengo que volver a dirigir con PHP desde search.php?

Ejemplo resultado deseado en acción: http://twitter.com/search/hello

EDITAR

prefiero no depender de JavaScript para hacer esto motores y personas con JavaScript desactivado verán esto también, así búsqueda.

Respuesta

7

Creo que el problema es que ha creado un formulario HTML con el método GET, que automáticamente abre la URL de esa manera que ha especificado como resultado. Si desea enviar su consulta de búsqueda como el que se desea, se debe cortar la forma con un poco de JavaScript para llamar a la URL de su buen aspecto como éste:

<form method="get" action="/search/" onsubmit="return false;"> 
<input type="search" name="q" value="querystring" /> 
<input type="submit" onclick="window.location.href=this.form.action + this.form.q.value;" /> 
</form> 
+0

Gracias. Ver mi edición sobre JavaScript. – DADU

+0

No puedo pensar en otra solución que no implique JavaScript, aunque tiene que funcionar en caso de que un usuario tenga su JS desactivado, solo con la otra URL ("fea"). –

+0

mm. Parece que no es tan sencillo como imaginaba que era. – DADU

1

Creo que en realidad tendrá que crear una regla de reescritura separada que es esencialmente su regla de reescritura anterior, pero a la inversa. Luego colóquelo sobre su primera regla de reescritura.

RewriteRule ^/search?q=([-0-9a-z]+)$ /search/$1 [NC] 
RewriteRule ^search/([-0-9a-z]+)$ /search.php?q=$1 [L] 

Seem pretty ghetto para mí sin embargo. Tal vez deberías eliminar el botón Enviar de tu formulario y redirigirlo usando javascript.

+0

Thanks. Ver mi edición sobre JavaScript. – DADU

+0

Parece que no funciona correctamente. – DADU

2

Mira el truco en ésta página this. El truco es enviar el formulario a uno mismo (o supongo que se puede redirigir a una página intermedia), y utilizar la lógica del lado del servidor para redirigir utilizando una URL limpia.

+0

¡Impresionante! ¡Simplemente impresionante! ¡Todo lo que haces es publicar, luego hacer que el servidor redirija a un GET! ¡Bonito! Pretty URL y bondad de botón de retroceso. :) – gregthegeek

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. –

0

Ejemplo sin JavaScript

que su búsqueda de acción del formulario establecido en 'searchredirect.php' en lugar y nombre de la entrada a 'q'.

Crear un nuevo archivo PHP llamado searchredirect.php y sólo tienen el siguiente código:

<?php 
if (isset($_GET['q'])){ 
$url = $_GET['q']; 
header("location: search/".$url); 
} else { 
header("location: search"); 
} 
?> 

nombre que la página original de la búsqueda 'searchclean.

En su archivo .htaccess tener la siguiente regla de reescritura php':

RewriteRule ^search/([^/]*)$ /searchclean.php?q=$1 [L] 
0

me seguía

RewriteRule ^search/([^/\.]+)/?$ search.php?q=$1 [L]

en mi .htaccess, hice search_redirect.php con el código dado aquí debajo:

<?php 
if (isset($_GET['q'])){ 
$url = $_GET['q']; 
header("location: search/".$url); 
} else { 
header("location: search"); 
} 
?> 

Luego, por supuesto, he redirigido mis formularios para ir a search_redirect.php y listo. Esta combinación funcionó como un amuleto, luego, como tengo paginación, no tuve que hacer nada más, ya que todos usan GET en la cadena de consulta y luego $ i para el entero.

RewriteRule ^search/([^/\.]+)/page/([^/\.]+)?$ search.php?q=$1&pn=$2 [L]

Cuestiones relacionadas