2016-05-30 5 views
1

Ich verwende Apache 2.4.7. Ich verwende mod_rewrite, um einige URLs zu ändern.Apache2: Schreibe URL mit Fragezeichen

Ich möchte http://example.com/servicename/oldpage?id=abc zu http://example.com/servicename/newpage umschreiben.

Andere ähnliche Umschreibungen arbeiten, so glaube ich, die ? Insider-URL verursacht Probleme. Ich habe versucht, es mit \ zu entkommen.

Dies funktioniert, da es keine ? in url ist:

RewriteRule ^/servicename/old /servicename/new

Aber diese funktionieren nicht:

RewriteRule ^/servicename/oldpage?id=abc /servicename/newpage

RewriteRule ^/servicename/oldpage\?id=abc /servicename/newpage

Ich habe auch versucht RewriteCond mit von Beispielen wie diesem: .htaccess rewrite URL with a question mark "?" aber ich schaffte es nicht, sie arbeiten zu lassen.

Wie sollte URL neu geschrieben werden, die Fragezeichen enthält?

EDIT: Ich habe versucht, Lösungen in Match Question Mark in mod_rewrite rule regex gegeben, aber war nicht in der Lage, sie für mich arbeiten zu lassen. Diese Frage betrifft die Beibehaltung der Abfragezeichenfolge beim Neuschreiben, während ich sie beim Neuschreiben entfernen möchte.

+0

Wollen Sie die Rewrite auf Inhalt von 'id =' Query-String ab, oder Sie brauchen nur sie von der Anfrage entfernt newpage geschickt? –

+0

Ich möchte es entfernen, ohne auf seinen Inhalt zu achten. –

+0

Mögliches Duplikat von [Übereinstimmungs-Fragezeichen in mod \ _rewrite-Regelregex] (http://stackoverflow.com/questions/822421/match-question-mark-in-mod-rewrites-rule-regex) –

Antwort

1

Das RewriteRule-Muster wird mit dem Teil der URL nach dem Hostnamen und Port und vor der Abfragezeichenfolge verglichen.

Wenn der angeforderte URI eine Abfragezeichenfolge enthält und der Ziel-URI nicht, besteht das Standardverhalten von RewriteRule darin, diese Abfragezeichenfolge in den Ziel-URI zu kopieren. Wenn Sie das [QSD] -Flag verwenden, wird die Abfragezeichenfolge verworfen.

So, das sollte funktionieren:

RewriteRule ^/servicename/oldpage /servicename/newpage [QSD]