2009-06-30 1 views
0

Ich habe eine Reihe von RewriteRules in. Htaccess für SEO Zwecke. Beispiel ...Warum bricht ein Bindestrich in einer RewriteRule, wenn ich in einem Unterordner bin

RewriteEngine On 
RewriteRule ^signup$ /signup.php 
RewriteRule ^account$ /account.php 
RewriteRule ^logout$ /logout.php 
RewriteRule ^login$ /login.php 
RewriteRule ^recent-questions$ /recent.php 
RewriteRule ^popular-questions$ /popular.php 
... 
... 
(more similar stuff) 
... 
... 
RewriteRule ^(.*)/([-_~*a-zA-Z0-9]+)\|([0-9]+)(\/)?$ view.php?title=$1&id=$2&%{QUERY_STRING} 
RewriteRule ^([-_~*a-zA-Z0-9]+)(\/)?$ categories.php?key=$1 

Das System befindet sich in einem Unterordner "ask" auf dem Server.

Sie alle gut funktionieren, wenn ich den Ordner http://ask.mydomain.com

Karte Aber ich will keine Sub-Domain verwenden, da ich das Hinzufügen eines bestehenden Kopf & Fußzeile von anderen Menschen, die Aktie resouces verwaltet und enthält relative Links mit dem Haupt www. Webseite.

Wenn ich versuche, über http://www.mydomain.com/ask auf den Ordner zuzugreifen, führen die RewriteRules mit Bindestrichen in ihnen zu 404 Fehlern - die anderen funktionieren weiter.

Ich habe bereits versucht, die Bindestriche als - und% 2D zu entkommen. Ersteres machte keinen Unterschied. Letzteres bringt mich auf eine völlig falsche Seite.

Antwort

1

Lösung - Es war nicht die Bindestriche überhaupt.

Es war, weil MultiViews für www aktiviert wurde. Domains, aber nicht für Fragen.

Domains

/Anmeldungen Karte würde mit MultViews Standardverhalten /signup.php,

aber

/neu-Frage nicht

Unter dem fragen recent.php abbildet. Subdomain wird die URL in .htaccess neu geschrieben, wo sie korrekt verarbeitet wird. Aber MultiViews hat es unter dem www gebrochen. Domain.

0

Für mich Sie scheinen mit den falschen Gruppen zu ersetzen:

RewriteRule ^(.*)/([-_~*a-zA-Z0-9]+)\|([0-9]+)(\/)?$ view.php?title=$2&id=$3&%{QUERY_STRING} 

tun sollte, wenn ich das richtig verstehe, dass Ihr URLS haben die Form mydomain.com/bla/title|id

+0

Die Rewrite-Regeln befinden sich in einem .htaccess im Ordner ask, ohne dass RewriteBase angewendet wurde. Daher wird das lokale Verzeichnis vor der Verarbeitung gelöscht (wie hier dokumentiert: http://httpd.apache.org/docs/2.0 /mod/mod_rewrite.html#rewritebase) Ich habe Ihren Vorschlag trotzdem versucht, mit dem Ergebnis immer noch 404 für die lästigen Links. – rwired

+0

Auch wenn (. *) Nichts entspricht, ist es immer noch eine Gruppe, also sollten $ 2 und $ 3 stimmen. Auf der anderen Seite: Sind Sie sicher, dass zum Zeitpunkt der Anwendung der RewriteRule der String noch einen Schrägstrich vor dem Titel | id hat? Wenn nicht, wird es nicht gefunden. BTW: Beachte, dass ich kein .htaccess-Guru bin, also könnte ich überall falsche Annahmen machen. – balpha

Verwandte Themen