Htaccess wie umleiten, wenn alle anderen Regeln fehlschlagen?

2

Htaccess hat immer meine Probleme gegeben. Jedes Mal, wenn ich denke, dass ich es verstehe, widerspricht der Zugang dem, was ich gerade zu verstehen glaubte. Jede Hilfe wäre sehr dankbar.

Was ich mit htaccess machen möchte, ist das Umleiten von URIs wie:

www.example.com/get/something to  www.example.com/get.php/something
www.example.com/cape/something  to www.example.com/active.php/something

Zusammen mit ein paar anderen. Ich habe das großartige Funktionieren. Das, was ich nicht habe, ist, wenn keine dieser Regeln erfüllt ist, dann zu meiner Hauptdomäne umzuleiten. Wenn ich also eine URI von www.example.com/anythingThatIsNotDefined/anything oder nur von www.example.com/anythingThatIsNotDefined erhalte, möchte ich diese an http://www.anotherexample.com weiterleiten

Es ist der letzte Teil, den ich nicht zur Arbeit bringen kann. Meine aktuelle htaccess-Datei ist:

RewriteEngine On
RewriteRule ^get/(.*)$ /get.php/$1 [L]
RewriteRule ^skin/(.*)$ /active.php/$1 [L]
RewriteRule ^cape/(.*)$ /active.php/$1 [L]

Was muss ich ändern, um etwas zu erhalten, das nicht erhalten wird, oder Haut oder Umhang, um zu meiner anderen Domain umzuleiten?

Ich muss mehr hinzufügen, als zu bekommen, Haut und Umhang hinein, aber sobald ich es zum Laufen gebracht habe, sollte ich in der Lage sein, mehr hinein hinzuzufügen

Vielen Dank im Voraus, das hat mich wirklich verblüfft.

(Wenn dies nicht die richtige Stack-Site ist, die ich entschuldige, war es ein 50/50-Wurf zwischen hier und Überlauf. Ich war nicht sicher, zu welcher es gehörte.)

Ryan Sullivan
quelle

Antworten:

6

.htaccessVerwendet order, um zu bestimmen, was zuerst passiert (wie alle Apache-Konfigurationsdateien). In Ihrem Fall müssen Sie einfach alle "speziellen" Umschreiberegeln vor eine Sammelregel wie die folgende setzen.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.otherdomain.com/$1 [R=301,L]

Diese Regel besagt im Grunde, dass für alle Elemente, die nicht als feste Ressource (Datei oder Verzeichnis) vorhanden sind, die Anforderung an http://www.otherdomain.com weitergeleitet wird , einschließlich der URI-Zeichenfolge. Angenommen, dies erfolgt nach den Weiterleitungen Ihrer Friendly-URLs, werden diese nicht abgefangen.

Garrett
quelle
Danke, das hat funktioniert. Wenn ich nicht zulassen wollte, dass auf Ressourcen zugegriffen wird (außer den von mir angegebenen), könnte ich dann einfach die Bedingungen loswerden? Edit: Ich habe es ohne die Bedingungen getestet und das funktioniert perfekt für das, was ich brauchte. Gibt es einen Grund, warum eine der beiden Bedingungen beibehalten werden sollte, wenn ich etwas verbieten möchte, das nicht angegeben wurde? Oder war es das Richtige, beide zu entfernen?
Ryan Sullivan
Ja und nein. Lesen Sie diese Seite für weitere Informationen zu diesem Konzept: httpd.apache.org/docs/current/rewrite/flags.html#flag_l
Garrett
Kopiert dies nicht den ersten Schrägstrich? ZB /foo/bar->http://www.otherdomain.com//foo/bar
Simon Warta