Problema mod_rewrite

Salve

avrei un problema sul mod_rewrite del sito www.holdingimmobiliare.com questo

http://www.holdingimmobiliare.com/appartamenti/vendita.html

che corrisponde a

http://www.holdingimmobiliare.com/index.php?p=appartamenti&id=vendita

funziona

quest'altro invece

http://www.holdingimmobiliare.com/appartamenti/vendita/V084.html

che corrisponde a

http://www.holdingimmobiliare.com/index.php?p=appartamenti&id=vendita&rif=V084

non funziona

In locale funziona tutto tranquillamente non riesco a capire il motivo.

Il fil htaccess che uso è

RewriteEngine On
RewriteRule ^([^/]+).html index.php?p=$1 [L]
RewriteRule ^([^/]+)/([^/]+).html index.php?p=$1&id=$2 [L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+).html index.php?p=$1&id=$2&rif=$3 [L]
RewriteBase /

Saluti

inviato 8 anni fa
mozartino
X 0 X

Se funziona in locale allora non credo sia un problema di RewriteRule  :dunno:

prova a guardare i log di Apache oppure a contattare il gestore del server  :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Ti ringrazio per la risposta ne avevo bisogno soprattutto dal punto di vista morale.

Sono un musicista appassionato di php e sto facendo il sito per un amico.

Ho già aperto un ticket su aruba per la questione e sto aspettando.

Il log l'ho guardato ma non ci capisco molto, posto il codice:

[Fri Aug 08 14:44:20 2008] [error] [client xx.x.xxx.xxx] Negotiation: discovered file(s) matching 
request: /web/htdocs/www.holdingimmobiliare.com/home/appartamenti/vendita (None could be 
negotiated)., referer: http://www.holdingimmobiliare.com/appartamenti/vendita.html

Sono d'accordo sul fatto che non sia un problema di RewriteRule.

Infatti l'ho testato su

http://www.plectro.it/gino/appartamenti/vendita.html

e se clicco su http://www.plectro.it/gino/appartamenti/vendita/V084.html

la pagina si apre tranquillamente

mentre testandolo su

http://musike.netsons.org/appartamenti/vendita/V084.html

mi da errore.

Qundi mi chiedevo se potesse essere qualche direttiva del php che deve essere abilitata.

Comunque su www.plectro.it il php e installato come modulo mentre su gli altri due come cgi,

questo potrebbe influire sul funzionamento del sito?

Saluti  :bye:

risposto 8 anni fa
mozartino
X 0 X

Il PHP non centra, infatti Apache richiama il PHP solo dopo aver trasformato l'URL richiesto secondo le regole specificate.

Forse il problema è causato da qualche filtro utilizzato dal server per bloccare degli URL sospetti. Alcuni server infatti contengono delle regole di riconoscimento di URL potenzialmente pericolosi, ovvero URL che seguono uno schema già utilizzato in passato per sferrare attacchi. Può capitare che uno di questi filtri scambi il tuo URL per qualcosa di pericoloso. Per verificare se è così puoi provare a cambiare i testi presenti nell'URL (appartamenti, vendita) con dei testi a casaccio.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Questa è la risposta di Aruba

Gentile cliente,

a seguito di verifica effettuata risulta che ci sia un conflitto con la regola dell'.htaccess 
ed il fatto che ci siano una cartella ed un file col nome appartamenti.
la invito ad effettuare lei stesso un test rinominando tale file e cartella con nomi che non 
contengano la parola appartamento o una parte. Noterà che in quel modo la regola funziona correttamente.

Saluti

Ho trovato conferma anche qui

http://community.aruba.it/cgi-bin/ultimatebb.cgi?ubb=get_topic;f=52;t=000494;p=0

In effetti è vero.

La mia index è così formata

<?php include("inc/header.php");
$p="home";              //pagina di default per i contenuti centrali
if(isset($_GET['p'])){      //pagina passata via parametro
    $p=$_GET['p'];
    if($p!=basename($p) || !preg_match("/^[A-Za-z0-9\-_]+$/",$p) || $p=="index" || !file_exists($p.".php"))
        $p="error";     //pagina di errore
    }
// echo "Siete in: " . $p;
include($p.".php");
// include("inc/menu2.php");
include("inc/footer.php"); ?>

La pagina appartamenti invece

<?php
        $agg=array('vendita','affitto');
   // If the page is allowed, include it:
      if (in_array($_GET['id'], $agg)) {
         include ('appartamenti/' . $_GET['id'] . '.php');
      }
   
        else {
   
            // This includes the error page
               include  ('error.php');
      }

?>

Quindi appartamenti è sia una pagina che una directory e questo su aruba non funziona.

La cosa strana è che le prime due regole di urlrewrite le prendeva comunque, mentre la terza (dove il rif viene pescato dal db) non funziona.

Una domanda leggermente off_topic.

Conviene usare una index come la mia che carica solo la parte centrale o è meglio usare delle funzioni tipo:

<?php function top() {
   ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Admin</title>
  <link rel="stylesheet" href="stile.css" type="text/css" />
</head>

<body>
   <?php
}

function foot() {
   ?>
</body>
</html>
   <?php
}
?>

e poi inserirle in ogni pagina?

Voi come fate?

Saluti a tutti  :bye:

risposto 8 anni fa
mozartino
X 0 X

Alla fine ho risolto   O0

Era esattamente il contrario di come diceva aruba.

Infatti ho creato due directory (vuote) in appartamenti, con gli stessi nomi degli $id

cioe vendita e affitto, e tutto funziona normalmente.

Per ogni slash vuole una directory e a questo indirizzo

http://www.holdingimmobiliare.com/appartamenti/vendita/V084.html

cercava una directory di nome vendita (che non esisteva in quanto il dato passato veniva dal db)

nella cartella appartamenti.

Spero possa servire ad altre persone.

Sono contento di aver risolto.

Un saluto a tutti. :bye:

risposto 8 anni fa
mozartino
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda