Frage
Ich habe eine Drupal 4.7 Installation seit vielen Jahren verwendet und haben ein neues Problem auftauchen musste. Das heißt, die neu geschrieben URLs nun diese Zeichen angezeigt wird:? Q = in jeder URL Drupal erzeugt wie folgt: http://sitename.com/?q=path/alias , wo, bevor es wäre: http : //sitename.com/path/alias
.Meine beste Vermutung, warum dies passiert sein könnte, ist, dass ich vor kurzem einige PHP-Code begann mit kontextspezifischen Link Styling innerhalb weniger sideblocks hinzuzufügen. Hier ist der 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>
oder in jüngerer Zeit:
<?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>
Könnte dies das Problem sein? Wenn ja, irgendwelche Ideen über fixes?
Lösung
Ich glaube nicht, Ihr Snippet es verursacht wird. Er liest nur aus der Datenbank; macht es keine Änderungen an URLs. Ist mod_rewrite noch aktiviert? Dies kann durch eine aktuelle Änderung der Server-Konfiguration verursacht werden. Überprüfen Sie die Ausgabe von phpinfo()
.
Durch die Art und Weise, die Option $absolute
für url()
ist als separates Argument übergeben in Drupal 4.7, nicht in der $options
Array. Ihr Anruf sollte sein:
url($path, $absolute=TRUE);
Andere Tipps
Ich denke, dass Ihre saubere Urls nur gebrochen werden. Wenn Sie nicht sauber URLs aktiviert, werden alle URLs wie http://example.com/?q=/foo/bar/baz
aussehen. Die Rewrite-Regeln übersetzen Anfragen von http://example.com/foo/bar/baz
in http://example.com/?q=/foo/bar/baz
intern verarbeitet werden.
Sie müssen zurück gehen und stellen Sie sicher, dass Ihre Rewrite-Regeln arbeiten nach wie vor (kann man sogar http://example.com/foo/bar/bazz
gehen?) Und dass Drupal saubere URLs aktiviert hat.
Gehen Sie in admin / Einstellungen und stellen Sie sicher, reinigen URLs aktiviert ist.
Versuchen Sie Folgendes:
-
Laden Sie eine unmodifizierte .htaccess-Datei in das Stammverzeichnis der Website wieder
-
Stellen Sie sicher, dass Ihr Apache mod_rewrite zur Verfügung hat. Wenn Sie einen Shell-Zugang haben und es ist ein Ubuntu / Debian-Maschine, nur tun
a2enmod Rewrite
-
Überprüfen Sie, ob die Option auf admin / Einstellungen aktiviert ist
-
Erstellen Sie eine einfache Php-Datei auf dem Stammordner und geben Sie:
phpinfo ();
Dann einfach sehen, ob das Modul funktioniert.