una soporta segundo por optimizar lentas cuantas consultas consulta como agilizar php .htaccess search clean-urls

php - soporta - ¿Limpiar URLs para consultas de búsqueda?



optimizar consultas lentas mysql (6)

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:

<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>

Esto funciona:

HTML

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

htaccess

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

Pasando por 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 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 las personas con JavaScript desactivado lo verán también.


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]

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


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.


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:

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

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:

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

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]