Problema de reescritura / limpieza de URL mod
Pregunta
He estado utilizando una instalación de drupal 4.7 durante muchos años y he tenido un problema reciente. Es decir, las URL reescritas ahora muestran estos caracteres:? Q = en cada URL generada por drupal de la siguiente manera: http://sitename.com/?q=path/alias , donde antes sería: http : //sitename.com/path/alias .
Mi mejor conjetura de por qué esto podría estar sucediendo es que recientemente comencé a usar algún código PHP para agregar un estilo de enlace específico al contexto dentro de unos pocos bloques laterales. Aquí está el código:
<?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 más recientemente:
<?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>
¿Podría ser este el problema? Si es así, ¿alguna idea sobre soluciones?
Solución
No creo que tu fragmento lo esté causando. Solo lee de la base de datos; no realiza cambios en las URL. ¿Mod_rewrite todavía está habilitado? Esto puede deberse a un cambio reciente en la configuración del servidor. Verifique el resultado de phpinfo()
.
Por cierto, la opción $absolute
para url()
es se aprobó como argumento separado en Drupal 4.7, no en la matriz $options
. Su llamada debe ser:
url($path, $absolute=TRUE);
Otros consejos
Estoy pensando que tus URL limpias simplemente están rotas. Cuando no tiene activadas las URL limpias, todas sus URL se verán como http://example.com/?q=/foo/bar/baz
. Las reglas de reescritura traducen las solicitudes de http://example.com/foo/bar/baz
a http://example.com/foo/bar/bazz
para ser procesadas internamente.
Debe regresar y asegurarse de que sus reglas de reescritura sigan funcionando (¿puede incluso ir a <=>?) y que Drupal tenga activadas las URL limpias.
Vaya a admin / settings y asegúrese de que Clean URLs esté activado.
Pruebe lo siguiente:
-
Vuelva a cargar un archivo .htaccess no modificado en la raíz del sitio
-
Asegúrese de que su apache tenga mod_rewrite disponible. Si tiene acceso de shell y es una máquina Ubuntu / Debian, simplemente haga
reescritura de a2enmod
-
Compruebe si la opción está habilitada en admin / settings
-
Cree un archivo .php simple en la carpeta raíz y escriba:
phpinfo();
Luego solo vea si el módulo está funcionando.