it-swarm.com.de

mod_rewrite leert QUERY_STRING, wenn mit number begonnen wird

Ich habe neben meiner WordPress-Installation ein einfaches Datenbank-Abfrageskript, an das ich einen Parameter mit der folgenden URL übergebe: http://example.com/db/?p=foo.

Mein Datenbankskript liest den Parameter mit

$pid = $_GET['p'];

Alles funktioniert einwandfrei, wenn der Parameter nicht mit einer Zahl beginnt.

?p=foo ist also in Ordnung, aber ?p=3poo ist LEER.

Bearbeiten: Ich habe dies bestätigt, indem ich mein Skript in geändert habe

<?php
print_r($_GET);
exit;

was als Ausgang gibt

Array ( )

Ich vermute, dass es der mod_rewrite ist, der die mit einer Zahl beginnenden Parameter unterdrückt. Aber ich habe keine Ahnung warum und wie ich dieses Verhalten ändern kann. Irgendwelche Ideen?

Bearbeiten: Leider kann ich weder den Namen des Parameters 'p' noch die Werte des Parameters ändern, damit sie nicht mit Zahlen beginnen, da die URLs bereits als QR-Tags für die Öffentlichkeit freigegeben wurden Benötigen Sie eine Problemumgehung, damit genau diese URLs funktionieren.

Hier ist meine .htaccess-Datei im Stammordner (bearbeitet wie von MrWhite vorgeschlagen, funktioniert wie erwartet)

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]

RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

</IfModule>
1
nounours

Dank Tom habe ich mir die Plugins genauer angesehen.

Und ich kann bestätigen, dass das Problem NICHT mit mod_rewrite zusammenhängt, sondern mit einem Plugin-Konflikt. (Entschuldigung, dass ich so einen Verdacht geäußert habe, aber ich habe irgendwo ein sehr ähnliches Problem gelesen, das so erklärt wurde.)

Beim Deaktivieren von Plugin für Plugin habe ich festgestellt, dass Sie dieses Verhalten gemacht haben. Immer noch keine Ahnung warum, aber zumindest habe ich jetzt eine Problemumgehung: Deaktivieren dieses Plugins.

Vielen Dank an Tom und alle anderen für Ihre Hilfe!

3
nounours

Schließlich haben Sie das Problem vollständig verstanden und gelöst, indem Sie den @ MrWhite-Rat zur Verwendung von mod_rewrite zum Neuschreiben der Abfrage verwendet haben. Vielen Dank!

Erklären:

1) Mein http://example.com/db/?p=foo hat (und das habe ich nicht gemerkt) tatsächlich nicht auf die Datenbankabfrage zugegriffen .php-Skript, aber eine WordPress-Seite "db", die das dbquery.php-Skript mit dem Plugin "INCLUDEME" aufruft.

2) Die Abfragezeichenfolge wird also zuerst von Wordpress verarbeitet (oder was auch immer, der richtige Begriff ist nicht bekannt), und da - wie @Tom J Nowell betonte - mein Parameter "p" eine spezielle Bedeutung hat, wurde er geleert von "Wordpress" und schon hat es keine Abfragezeichenfolge ins Plugin geschafft. Es lag also nicht an den Plugins.

3) Fazit: Nicht mod_rewrite, nicht das Plugin, nicht der Wert, der mit einer Zahl beginnt, war das Problem, aber die einfache Tatsache, dass ich "p" verwendet habe, war die Ursache des Problems.

4) Die Lösung bestand aus:

a) benenne die WP-Seite "db" in "nachverfolgbarkeit" um

b) Erstelle ein Verzeichnis mit dem Namen "db"

c) in db eine .htaccess-Datei ablegen, die die folgende Umleitung enthält, um von db auf die neue Seite "nachverfolgbarkeit" (die dbquery.php mit INCLUDEME aufruft) umzuleiten; und Korrigieren des Parameters von "p" nach "pid"

Nicht sehr schöner Patch, aber er funktioniert gut. Also mein Rat an jeden Leser: "Niemals p als Parameternamen verwenden" ...

Vielen Dank an alle für ihre Hilfe. Nounours

RewriteEngine On
RewriteCond %{QUERY_STRING} ^p=(.*)$
RewriteRule ^$ /nachverfolgbarkeit/?pid=%1   [R=301]
2
nounours