2009-08-03 4 views
0
Options +FollowSymLinks 

RewriteEngine On 
RewriteMap name2id txt:/path/to/map.txt 

RewriteRule ^/mods/([^/]+)\.html$ /mod.php?id=${name2id:$1|0} [QSA,L] 

Das erste Mal, um eine URL mit rewriteMap neu zu schreiben. Ich habe einen Code oben, aber es gibt eine 404 Seite zurück, wenn ich http://example.com/mysite/mods/abc.html in meinem Browser laufen lasse. Ich habe den obigen Code in meine virtuelle Host-Datei in Apache-Konfiguration, ich lese in einigen Foren, dass RewriteMap nur funktioniert, wenn Sie Zugriff in httpd.conf und virtuellen Host haben. mod_rewrite läuft auf meinem Windows-Rechner, weil ich in der Lage war, eine in meiner .htaccess-Datei definierte Regel auszuführen.Apache mod_rewrite und RewriteMap Verwendung

Die map.txt enthält

abc 123 
def 456 
ghi 789 
+0

Haben Sie sichergestellt, dass mod_rewrite läuft ordnungsgemäß und Apache ermöglicht. Htaccess-Dateien? – Gumbo

+0

Ja, mod_rewrite läuft ordnungsgemäß und erlaubt die .htaccess-Datei. Ich konnte einige in htaccess definierte Regeln ausführen. – christian

Antwort

1

Wenn Sie /mysite/mods/… beantragen, sollte die Regel eher sein:

RewriteRule ^/mysite/mods/([^/]+)\.html$ /mod.php?id=${name2id:$1|0} [QSA,L] 
+0

aber ich deklariere meine RewriteBase als/mysite. Und selbst ich füge/mysite/mods/still 404 hinzu. Ist das in Ordnung, wenn meine Regel in meiner htaccess Datei liegt und die Deklaration von rewriteMap in meinem virtuellen Host ist? – christian

+0

Hast du versucht, die Regel mit *^mods * anstelle von * ^/mods * zu starten? –

+0

Ja, ich habe versucht und immer noch 404 zeigt. – christian

0

Wenn Sie RewriteBase verwenden, versuchen Sie den Anfangsstrich in der Entfernung Regel:

RewriteRule ^mods/([^/]+)\.html$ /mod.php?id=${name2id:$1|0} [QSA,L] 
+0

Ich habe meinen Code funktioniert, aber wenn ich http://example.com/mysite/mods/abc.html ausgeführt habe, bekam ich 0, als ich die Abfragezeichenfolge-ID wiederholte, ist das richtig? korrigiere mich, wenn ich falsch liege, weil ich das Äquivalent von abc w/c erwarte, wird 123 angezeigt. – christian