Question
J'utilise une installation Drupal 4.7 depuis de nombreuses années et j'ai récemment rencontré un problème. Autrement dit, les URL réécrites affichent désormais les caractères suivants:? Q = dans chaque URL générée par Drupal, comme suit: http://sitename.com/?q=path/alias , où il se trouvait auparavant: http : //sitename.com/path/alias .
La meilleure raison pour laquelle cela pourrait se produire est que j'ai récemment commencé à utiliser du code PHP pour ajouter un style de lien spécifique au contexte dans quelques blocs latéraux. Voici le code:
<?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>
Ou plus récemment:
<?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>
Cela pourrait-il être le problème? Si oui, des idées de solutions?
La solution
Je ne pense pas que votre extrait en soit la cause. Il ne lit que dans la base de données; il ne modifie pas les URL. Mod_rewrite est-il toujours activé? Cela peut être dû à une modification récente de la configuration du serveur. Vérifiez la sortie de phpinfo()
.
Au fait, l'option $absolute
pour url()
est transmise en tant que argument séparé dans Drupal 4.7, pas dans le tableau $options
. Votre appel devrait être:
url($path, $absolute=TRUE);
Autres conseils
Je pense que vos URLs propres sont simplement cassées. Lorsque vous n'avez pas activé les URL propres, toutes vos URL ressemblent à http://example.com/?q=/foo/bar/baz
. Les règles de réécriture traduisent les demandes de http://example.com/foo/bar/baz
en http://example.com/foo/bar/bazz
à traiter en interne.
Vous devez revenir en arrière et vous assurer que vos règles de réécriture fonctionnent toujours (pouvez-vous même aller à <=>?) et que Drupal a activé les URL saines.
Allez dans admin / settings et assurez-vous que l'option Nettoyer les URL est activée.
Essayez ce qui suit:
-
Téléchargez à nouveau un fichier .htaccess non modifié à la racine du site
-
Assurez-vous que mod_rewrite est disponible sur votre apache. Si vous avez un accès shell et qu’il s’agit d’une machine Ubuntu / Debian, faites simplement
a2enmod rewrite
-
Vérifiez si l'option est activée sur admin / settings
-
Créez un fichier .php simple sur le dossier racine et tapez:
phpinfo ();
Il suffit ensuite de voir si le module fonctionne.