2009-06-05 20 views
1

Ich habe ein schwieriges Problem, einige URLs intern für meine Website umleiten.Tricky URL Rewrite, Regex .htaccess

Die Situation ist dies, ich habe zur Zeit eine URL wie example.com/check/youtube.com die intern Umleitungen an check.php?domain=youtube.com den folgenden mod_rewrite Code verwendet:

Options +FollowSymlinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L] 

RewriteRule ^offline offline.php [NC,L] 
RewriteRule ^error error.php [NC,L] 

RewriteRule ^check/(.*)$ check.php?domain=$1 [NC,L] 

aber ich möchte auch check.php mit einer URL umleiten können, mögen example.com/youtube.com. Leider ist es einfach jenseits von mir, es herauszufinden.

Ich habe ein Verzeichnis /assets/ mit allen CSS, JS, etc., die nicht betroffen sein sollte.

Dank

Antwort

2

Versuchen Sie, diese Regel:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^[^/.]+\.[^/]+$ check.php?domain=$0 [L] 

Diese Regel jede Anforderung mit einem URL-Pfad der Form umschreibt [^/.]+\.[^/]+ (eine Zeichenfolge, die überhaupt mindestens einen Punkt, aber keine Schrägstriche enthält), die nicht können einer vorhandenen Datei zu Ihrem check.php zugeordnet werden.

+0

Dank einer Tonne, inteasieren, dass Sie $ 0 verwenden, wie ich das vorher nicht gesehen habe, muss ich nachsehen: P –

+0

'$ 0' ist nur die übereinstimmende Zeichenfolge des gesamten regulären Ausdrucks. – Gumbo

+0

Ah, ja das macht viel Sinn. Danke noch einmal. –

0

Da Sie "example.com/youtube.com" umleiten möchten, bedeutet das, dass Sie so ziemlich alles umleiten möchten? Was speziell erlaubt ist, z.B. Würde ich "example.com/youtube.com/foobar.php" für eine Weiterleitung an check.php übergeben können?

+0

Nun, das Skript wird über js bei der Einreichung bereinigt (es gibt auch einen Hinweis für nicht js-Benutzer). Wenn Sie also * example.com/youtube.com/foobar.php * senden würden, würde es auf * Beispiel aktualisiert werden .com/youtube.com *. Wenn jemand diesen Link direkt an das Skript sendet, dann gibt es eine 404. Aber ich werde später daran arbeiten, und es ist kein Problem. obwohl wenn Sie es stattdessen mit .htaccess reinigen könnten, wäre das cool ... –