Mod -Schreiben Sie die vollständige Befuzzement [geschlossen
-
05-07-2019 - |
Frage
Hier ist meine .htaccess -Datei
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteRule subpage\?sid /index.php [R=301,L,NC]
Meine Anfrage ist http://example.com/subpage?sid
Es kehrt immer wieder 404 zurück, anstatt auf index.php umzuleiten
Ich habe versucht, dem nicht zu entkommen? und ändern die Anfrage an http://example.com/subpage\?sid
Ich habe viele Dinge ausprobiert, um dies zum Laufen zu bringen, bin aber jetzt verblüfft.
Lösung
Der Query_String ist nicht Teil des URI. Aus der Dokumentation für Neu wrichen:
Hinweis: Abfragezeichenfolge
Das Muster wird nicht gegen die Abfragezeichenfolge abgestimmt. Stattdessen müssen Sie eine Umschreibe mit dem verwenden
%{QUERY_STRING}
Variable.
Wie der Dokument sagt, müssen Sie eine Rewritecond verwenden, so etwas wie:
RewriteCond %{QUERY_STRING} (^|&)sid([&=]|$) [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]
Wenn %{query_string} wirklich keine Option ist, versuchen Sie es mit:
# Apache is supposed to use PCRE, but doesn't seem to like "\\s"
RewriteCond %{THE_REQUEST} subpage?sid[^!-~] [NC]
RewriteRule ^/?subpage /index.php [R=301,L,NC]
Außerdem brauchen Sie fast nie RewriteBase, wie Sie es verwenden ("Rewritebase /"). Kommentieren Sie die Zeile und testen Sie sie, um sicher zu sein, aber Sie werden wahrscheinlich feststellen, dass Sie sie ohne krankhafte Auswirkungen löschen können.
Andere Tipps
Vielleicht müssen Sie die VirtualHost -Einstellung für Ihre Website überprüfen und die Einstellung für die Erlaubnis für das entsprechende Verzeichnis festlegen?
<Directory /var/www/vhosts/some_host>
....
AllowOverride All
</Directory>
Hier ist mehr über Apache's ALLGESTELLT