rewrite .htacces

andrea1971

Nuovo Utente
29 Dic 2010
29
0
0
volevo chiedere dove sta l'errore,visto che provo a richiamare una parola doppia e il + non me lo da,questo e' l'esempio:


RewriteRule ^ricerca/([0-9a-zA-Z_-]+)([0-9a-zA-Z_-è]+)([0-9a-zA-Z_-è]+)/([0-9a-zA-Z_-è]+)

searchresults.php?searchtext=$1+$2&type=$3&submit=Cerca [NC,QSA]


dovrebbe darmi la pagina a questo indirizzo o sbaglio:

miosito.com/ricerca/pianta+carnivora/piante

dove pianta+carnivora e' la parola ricercata $1+$2
e piante e' la categoria $3


grazie
 
Ti do un consiglio: non dovresti mai usare il rewrite engine per i risultati dell'invio dei moduli. Usa il metodo POST in modo da non passare le variabili nell'URL. Comunque quello che vuoi si dovrebbe poter ottenere con:
Codice:
RewriteRule ^ricerca/([a-zA-Z0-9\+]+)/([a-zA-Z0-9]+)/$ searchresults.php?searchtext=$1&type=$2&submit=Cerca [QSA,L]
 
Ti do un consiglio: non dovresti mai usare il rewrite engine per i risultati dell'invio dei moduli. Usa il metodo POST in modo da non passare le variabili nell'URL. Comunque quello che vuoi si dovrebbe poter ottenere con:
Codice:
RewriteRule ^ricerca/([a-zA-Z0-9\+]+)/([a-zA-Z0-9]+)/$ searchresults.php?searchtext=$1&type=$2&submit=Cerca [QSA,L]

mi funziona ma non mi prende la parola doppia,esempio:
pianta+carnivora/piante

se metto carnivora/piante funziona!!

thanks
 
Ho fatto una prova. Il file .htaccess contiene:
Codice:
RewriteEngine On
RewriteRule ^ricerca/([a-zA-Z0-9\+]+)/([a-zA-Z0-9]+)/?$ searchresults.php?searchtext=$1&type=$2&submit=Cerca [QSA,L]
E il file searchresults.php contiene:
PHP:
<?php
var_dump($_GET);
Se accedo a /ricerca/piante+carnivore/piante ottengo:
Codice:
array(3) {
  ["searchtext"]=>
  string(11) "pianta ciao"
  ["type"]=>
  string(6) "pianta"
  ["submit"]=>
  string(5) "Cerca"
}
Quindi funziona correttamente.
 
Ti do un consiglio: non dovresti mai usare il rewrite engine per i risultati dell'invio dei moduli. Usa il metodo POST in modo da non passare le variabili nell'URL. Comunque quello che vuoi si dovrebbe poter ottenere con:
Codice:
RewriteRule ^ricerca/([a-zA-Z0-9\+]+)/([a-zA-Z0-9]+)/$ searchresults.php?searchtext=$1&type=$2&submit=Cerca [QSA,L]

Grazie per il consiglio,pero io vorrei fare vedere l'URL della pagina dove l'utente si trova!,se uso il metodo POST ,mi fa vedere solo searchresults.php,e io vorrei fare vedere altre informazioni come:parola+ricercata/categoria/
ad esempio : www.miosito.com/ricerca/pianta+carnivora/piante
diciamo che il RewriteRule nel file .htacces funziona e mi da la pagina ma solo tramite link.
mi spiego meglio se creo un collegamento ad una pagina con questo link:
www.miosito.comsearchresults.php?searchtext=pianta+carnivora&type=10&submit=Cerca mi rimanda a:
www.miosito.com/ricerca/pianta+carnivora/piante
mentre tramite ricerca mi crea lo stesso URL:
www.miosito.com/searchresults.php?searchtext=pianta+carnivora&type=10&submit=Cerca ma non mi rimanda
alla pagina come sopra,ma rimane in :
www.miosito.com/searchresults.php?searchtext=pianta+carnivora&type=10&submit=Cerca

probabilmente e' un problema di struttura del form,ma non ne vengo fuori!help
grazie
 
Questo perché non è possibile passare i parametri di un form nell'URL se stai usando il rewrite engine (ecco perché ti ho detto di usare POST!). L'unico modo è far puntare il form ad una pagina PHP "di transizione" che reindirizzi all'URL corretto:
PHP:
<?php
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
    header('Location: pagina_del_form.php');
}

$query = '/' . str_replace(' ', '+', $_POST['query']);
$categoria = isset($_POST['categoria']) ? "/{$categoria}";

header("Location: /ricerca{$query}{$categoria}");
?>
Comunque ripeto che ti stai complicando inutilmente la vita.
 
Questo perché non è possibile passare i parametri di un form nell'URL se stai usando il rewrite engine (ecco perché ti ho detto di usare POST!). L'unico modo è far puntare il form ad una pagina PHP "di transizione" che reindirizzi all'URL corretto:
PHP:
<?php
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
    header('Location: pagina_del_form.php');
}

$query = '/' . str_replace(' ', '+', $_POST['query']);
$categoria = isset($_POST['categoria']) ? "/{$categoria}";

header("Location: /ricerca{$query}{$categoria}");
?>
Comunque ripeto che ti stai complicando inutilmente la vita.

questa naturalmente va modificata in base ai miei parametri del form ed inserita nalla pagina searchresults.php
giusto!! grazie mille intanto,non vorrei romperti troppo,ma quando non ci esci,e' un macello,specialmente senza,la conoscenza!! thanks!
 
purtroppo non riesco a testarlo mi da degli errori di sintassi :
PHP:
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
    header('Location: pagina_del_form.php');
}

$query = '/' . str_replace(' ', '+', $_POST['query']);
$categoria = isset($_POST['categoria']) ? "/{$categoria}";///qui e poi succ.

header("Location: /ricerca{$query}{$categoria}");///qui
 
funzionerebbe anche ,e solo che il form,e' in tutte le pagine ed e' in una pagina .tpl ,e che fa riferimento ad una pagina .php e solo che quando visito la pagina .php mi rimanda a quella specificata in Location.
e' per caso possibile scrivere questa funzione in un'altro linguaggio da poterla inserire in una pagina.tpl dove ho il form ??
 
Non penso che sia possibile. L'errore di fondo è proprio nel voler passare i dati del form tramite GET usando il rewrite engine. Tu praticamente stai cercando di fare una cosa che neanche il più complicato dei Web framework gestisce.
 
ho risolto,creando una nuova pagina .php e non includendola nel rewrite,come dicevi tu,l'unica cosa e' che per il momento riesco solo ad acquisire solo la query,e non la categoria!!
in questa riga:
PHP:
 header('Location: pagina_del_form.php');
e' per caso possibile assegnare piu pagina?
domanda da principiante??

grazie,come al solito sei un grande!
 
no,non c'e' bisogno e solo che dovrei risolvere questo ultimo problema,per il resto funziona tutto:
questo e' il codice che ho modificato,e in questo modo funziona:
PHP:
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
 header('Location: risultati.php');
}
$searchtext = '/' . str_replace(' ', '+', $_POST['searchtext']);
if(empty($_POST['type']))
	{
	echo "";
else
{
$type = '/' . str_replace(" ","", $_POST['type']);
}
if(empty($_POST['sezione']))
	{
	echo "";
else
{
$sezione = '/' . str_replace(" ","", $_POST['sezione']);
}
header("Location: /ricerca{$searchtext}{$type}{$sezione}");

cosi funziona,e solo che volevo assegnare delle array per la sezione type,perche me li da come numeri e vorrei convertirli in nomi,ad esempio 10=piante,11=fiori,ecc. ma in questo modo non mi prende piu i risultati della ricerca,ma me li da tutti!!
sto a inpazzi!!!grazie
 
il problema l'ho risolto adesso pero mi e' ritornato il problemino dove l'avevo risolto prima:
PHP:
$searchstring=($_GET['searchtext']); 
$sSQL="SELECT keywords FROM ".PREFIX."pm_search WHERE keywords='".$searchstring."'";    
    $result = $db->query($sSQL);  
    
      if($result->size()>0)
        {
        while($rs=$result->fetch())    
    
$sSQL="UPDATE ".PREFIX."pm_search SET hit = hit + 1 WHERE keywords='".$searchstring."'";
$db->query($sSQL);
    }
    else if ($searchstring=($_GET['searchtext'])== NULL)
    {
    echo '';
}
else
    {
    $searchstring=($_GET['searchtext']);
            
$sSQL="INSERT ".PREFIX."pm_search SET  keywords='".$searchstring."'ON duplicate KEY UPDATE hit=hit+ 1 ";         
$db->query($sSQL);
}

cosi funzionava ,ma adesso cambiando i parametri del form in POST,non funziona piu il richiamo delle parole piu ricercate!
qualche soluzione??
thanks
 
praticamente non mi riesce a fare piu il controllo del :
PHP:
$sSQL="SELECT keywords FROM ".PREFIX."pm_search WHERE keywords='".$searchstring."'";    
    $result = $db->query($sSQL);  
    
      if($result->size()>0)
        {
        while($rs=$result->fetch())

e di conseguenza mi inserisce ogno volta la parola ricercata doppia,sia in categoria,che non creandomi due record,anche se la parola esiste gia,ho provato a modificare la richiesta da
PHP:
GET
A
PHP:
POST
ma niente fa uguale,questo e' il codice attuale che ho:
PHP:
sSQL="SELECT keywords,section FROM ".PREFIX."pm_search WHERE keywords='".$searchstring."'AND section='".$section."'";	
    $result = mysql_query(sSQL); 
	$searchstring =($_POST['searchtext']);
	$section =str_replace("/","",$section);
	  if (mysql_num_rows($result) == 0)
		{
 $sSQL = sprintf("INSERT INTO ".PREFIX."pm_search (keywords,section) VALUES (%s,%s)ON duplicate KEY UPDATE hit=hit+ 1",
							
							GetSQLValueString($searchstring=($_POST['searchtext']),"text"),
							
							GetSQLValueString(str_replace("/","",$section),"text"));
									
									$result=$db->query($sSQL);
   
 
}
	
		
else
{
while ($row = mysql_fetch_assoc($result))
	$sSQL="UPDATE ".PREFIX."pm_search SET hit = hit + 1 WHERE keywords='".$searchstring."'AND section='".$section."'";	
$db->query($sSQL);
}
 

Discussioni simili