2010-03-13 4 views
5

Ich habe ein (WordPress) Blog, wo nach dem Kommentieren die Benutzer zurück auf die Seite mit einem Anker zu ihrem Kommentar umgeleitet werden. Sollte wie folgt aussehen:Wie man eine URL mit% 23 neu schreibt?

http://example.org/foo-bar/#comment-570630

Aber ich bekomme irgendwie eine Menge von 404 in mein Logfiles für solche URLs:

http://example.org/foo-bar/%23comment-570630

Gibt es eine Möglichkeit, eine .htaccess-Rewrite-Regel zu schreiben repariere das?

Bonus Frage: Eine Idee, warum das passiert und was ich dagegen tun kann?

+1

Wie erfolgt die Umleitung? – Gumbo

+0

@Gumbo: Mit einem 302 gefundenen Redirect. Der generierte Header sieht folgendermaßen aus: "Location:/foo-bar/# comment-571738" – janpio

+0

Können Sie den Code posten, der das tut? – Gumbo

Antwort

4

%23 ist die URL-codierte Darstellung von #. Ich vermute, dass Ihre Rewrite-Regeln %23 nicht erfüllen. Sie sollten untersuchen, wie die Antwort aufgebaut wird. Insbesondere alle URL-Codierungsfunktionen.

Es wäre jedoch möglich, Ihr Problem mit einer Rewrite-Regel zu lösen. Verstehen Sie, dass Sie zwei Antworten an den Kunden zurücksenden, nachdem ein Kommentar gesendet wurde. Deshalb ist es besser, die erste Antwort zu korrigieren.

# http://example.org/foo-bar/%23comment-570630 -> http://example.org/foo-bar/#comment-570630 
RewriteCond %{REQUEST_URI} %23comment-\d+$ 
RewriteRule (.+)\/%23-comment(\d+)$ http://host/$1/#comment-$2 [R=301] 

Es ist nicht getestet, sollten aber funktionieren (ich bin nicht sicher entkommen \% wie es eine besondere Bedeutung in mod_rewrite hat).

+0

Problem ist, dass die Antwort auf allen Systemen in Ordnung ist, die ich testen könnte. Es ist # in der URL und die Weiterleitung funktioniert, ich weiß nicht wo und warum das kaputt gehen könnte. – janpio

+0

Zu Ihrer Rewrite-Regel: Funktioniert nicht. Der Abgleich der request_uri scheint nicht zu funktionieren, da bin ich steckengeblieben und bin auch hierher gekommen, um zu fragen. – janpio

+0

'RewriteCond' wird nicht zufriedengestellt? Haben Sie versucht, den Prozentwert zu umgehen? –

0

Haben Sie versucht, die B Flag?

RewriteCond %{REQUEST_URI} %23comment-\d+$ 
RewriteRule (.+)\/%23-comment(\d+)$ http://host/$1/#comment-$2 [B,R=301] 

nicht mit Ihrem spezifischen Fall getestet, aber für ein verwandtes Problem verwendet.

+0

diese antwort ist für leute googeln für genau dieses selbe problem ... entschuldigung für irgendwie wiederbelebung dieses geschlossenen und alten threads – maddrag0n

Verwandte Themen