2008-09-16 10 views
3

Ist es möglich, .htaccess zu verwenden, um alle sechsstelligen URLs zu verarbeiten, indem man sie an ein Skript sendet, aber jede andere ungültige URL als Fehler behandelt 404?Ist es möglich, mit .htaccess URLs mit sechs Ziffern an ein Skript zu senden, aber alle anderen ungültigen URLs als 404 zu behandeln?

Zum Beispiel:

http://mywebsite.com/scriptname.php?no=132483 

aber

http://mywebsite.com/132483a or 
http://mywebsite.com/asdf 

als 404 Fehler behandelt wäre:

http://mywebsite.com/132483 

würde gesendet.

Ich habe derzeit dies funktioniert über eine benutzerdefinierte PHP 404 Skript, aber es ist eine Art kludgy. Es scheint mir, dass .htaccess eine elegantere Lösung ist, aber ich konnte nicht herausfinden, ob es überhaupt möglich ist.

Antwort

4
<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule ^([0-9]{6})$ scriptname.php?no=$1 [L] 
</IfModule> 

die saubere URL

http://mywebsite.com/132483 

zu bewahren, während nur scriptname.php Gebrauch dienen [L]. mit [R = 301] werden Sie zu Ihrem scriptname.php umleiten? No = xxx

Sie finden diesen nützlichen http://www.addedbytes.com/download/mod_rewrite-cheat-sheet-v2/pdf/

+0

Vielen Dank für Ihre Hilfe! Das funktioniert perfekt. –

0

Ja, es ist möglich mit mod_rewrite. Es gibt Tonnen von guten mod_rewrite Tutorials online eine schnelle Google-Suche sollte Ihre Antwort in kürzester Zeit ergeben.

Im Grunde sollten Sie sicherstellen, dass der reguläre Ausdruck, den Sie verwenden, nur nach Ziffern und anderen Zeichen sucht, und um sicherzustellen, dass die Länge 6 ist. Dann werden Sie zu Skriptname umgeleitet mit der Nummer, die du erfasst hast.

Hoffe, das hilft!

11

In Ihrer .htaccess-Datei, setzen Sie die folgende

RewriteEngine On 
RewriteRule ^([0-9]{6})$ /scriptname.php?no=$1 [L] 

Die erste Zeile auf die mod_rewrite Motor dreht. Die() Klammern setzen den Inhalt in $ 1 - sukzessive() würde $ 2, $ 3 usw. auffüllen ... und so weiter. Die [0-9] {6} sagt, dass nach einer Zeichenfolge gesucht wird, die genau 6 Zeichen lang ist und nur die Zeichen 0-9 enthält.

Das [L] am Ende macht dies zur letzten Regel - wenn es zutrifft, wird die Regelverarbeitung gestoppt.

Oh, die^und $ markieren den Anfang und das Ende der eingehenden URI.

Hoffe, dass hilft!

+0

Doh. Du hast mich um ein paar Sekunden geschlagen. :) –

+0

Der R = 301 ist optional. Es sollte nur verwendet werden, wenn Sie nicht möchten, dass die numerische Version in der URL (oder bei Spidern) sichtbar ist. –

+0

yeah - Ich denke, 301 ist die Standardeinstellung sowieso –