Problema riscrittura / pulizia URL mod
Domanda
Uso un'installazione drupal 4.7 da molti anni e ho avuto un recente problema. Cioè, gli URL riscritti ora mostrano questi caratteri:? Q = in ogni URL generato da drupal come segue: http://sitename.com/?q=path/alias , dove prima sarebbe: http : //sitename.com/path/alias .
La mia ipotesi migliore sul perché ciò potrebbe accadere è che di recente ho iniziato a utilizzare un codice PHP per aggiungere uno stile di collegamento specifico al contesto in pochi blocchi laterali. Ecco il codice:
<?php $alias= $_GET['q']; ?>
<a <?php $pos=strpos($alias,"1234"); // node number
if(!$pos == false) {
echo 'style="color:black"';
} ?> href="internal/link/alias">Internal Link</a>
O più recentemente:
<?php $path = isset($_GET['q']) ? $_GET['q'] : '<front>';
$alias = url($path, array('absolute' => TRUE)); ?>
<a <?php $pos=strpos($alias,"internal/link/alias");
if(!$pos == false) {
echo 'style="color:black"';
} ?> href="internal/link/alias">Internal Link</a>
Potrebbe essere questo il problema? In tal caso, qualche idea sulle correzioni?
Soluzione
Non credo che il tuo frammento lo stia causando. Legge solo dal database; non apporta modifiche agli URL. Mod_rewrite è ancora abilitato? Ciò può essere causato da una recente modifica alla configurazione del server. Controlla l'output di phpinfo()
.
A proposito, l'opzione $absolute
per url()
è passata come argomento separato in Drupal 4.7, non nella matrice $options
. La tua chiamata dovrebbe essere:
url($path, $absolute=TRUE);
Altri suggerimenti
Sto pensando che i tuoi URL puliti siano appena rotti. Quando non hai gli URL puliti attivati, tutti i tuoi URL appariranno come http://example.com/?q=/foo/bar/baz
. Le regole di riscrittura traducono le richieste da http://example.com/foo/bar/baz
a http://example.com/foo/bar/bazz
per essere elaborate internamente.
Devi tornare indietro e assicurarti che le tue regole di riscrittura funzionino ancora (puoi anche andare su <=>?) e che Drupal abbia gli URL puliti attivati.
Vai in admin / settings e assicurati che Clean URLs sia attivato.
Prova quanto segue:
-
Carica di nuovo un file .htaccess non modificato nella radice del sito
-
Assicurati che apache abbia mod_rewrite disponibile. Se hai accesso alla shell ed è una macchina Ubuntu / Debian, basta
a2enmod rewrite
-
Controlla se l'opzione è abilitata su admin / settings
-
Crea un semplice file .php nella cartella principale e digita:
phpinfo ();
Quindi vedi se il modulo funziona.