¿Limpiar URLs para consultas de búsqueda?

Esto funciona:

HTML

query 

htaccess

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

Pasando por un formulario de búsqueda:

 
  • Resultado: http://example.com/search?q=querystring
  • Resultado deseado: http://example.comhttps://stackoverflow.com/search/querystring

¿Es esto posible con htaccess o necesito redireccionar con PHP desde search.php?

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

EDITAR

Prefiero no depender de JavaScript para hacer esto, de modo que los motores de búsqueda y gente con JavaScript deshabilitado también lo verán.

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 la deseada, debe hackear el formulario con un poco de JavaScript para llamar a su URL atractiva de esta manera:

 

Vea el truco en esta página. 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.

Creo que en realidad tendrás que crear una regla de reescritura por separado que sea esencialmente tu regla de reescritura más arriba, 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] 

Aunque me parece bastante gueto. Tal vez deberías eliminar el botón Enviar de tu formulario y redirigirlo usando javascript.

Para todos los que intenten resolver este problema solo con mod_rewrite (sin JavaScript), vean esta pregunta: redirigir y reescribir con mod_rewrite

EJEMPLO SIN JAVASCRIPT

Haga que su acción de formulario de búsqueda se establezca en ‘searchredirect.php’ en su lugar y añada el nombre a ‘q’.

Crea un nuevo archivo php llamado searchredirect.php y solo tiene el siguiente código:

  

Nombra tu página de búsqueda original ‘searchclean.php’

En su archivo .htaccess, tenga la siguiente regla de reescritura:

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

Solo me quedé

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

en mi .htaccess, hice search_redirect.php con el código que se proporciona a continuación:

  

Luego, por supuesto, redirigí mis formularios para ir a search_redirect.php y voila. 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]