Frage

Problem

Ich brauche ein paar kurze Bequemlichkeit URLs zu längerer tatsächlichen URLs umleiten. Der Standort in Frage verwendet eine Reihe von Sub-Domains eine Reihe von Entwicklung oder Live-Versionen zu identifizieren.

Ich mag die URL, an die bestimmten Anforderungen umgeleitet werden, um die HTTP_HOST enthalten, so dass ich keine benutzerdefinierten .htaccess-Datei für jeden Host erstellen muß.

Host-spezifisches Beispiel (aus .htaccess-Datei snipped)

Redirect /terms http://support.dev01.example.com/articles/terms/

Dieses Beispiel arbeitet für die Entwicklungsversion Fein bei dev01.example.com läuft. Wenn ich die gleiche Zeile in der Haupt .htaccess-Datei für die Entwicklungsversion läuft unter dev02.example.com verwenden würde ich am Ende an der falschen Stelle weitergeleitet werden.

Ideal Regel (nicht sicher, ob der korrekten Syntax)

Redirect /terms http://support.{HTTP_HOST}/articles/terms/

Diese Regel funktioniert nicht und dient lediglich als ein Beispiel das, was Ich mag würde zu erreichen. Ich konnte dann genau die gleiche Regel unter vielen verschiedenen Hosts verwenden und das richtige Ergebnis bekommen.

Antworten?

  • Kann dies mit mod_alias erfolgen oder den komplexeren mod_rewrite erfordert?
  • Wie kann dies unter Verwendung mod_alias oder mod_rewrite erreicht? Ich würde eine mod_alias Lösung, wenn möglich bevorzugen.

Clarifications

Ich bin nicht auf dem gleichen Server zu bleiben. Ich möchte:

Ich mag die gleiche Regel in der .htaccess-Datei sowohl auf example.com und dev.example.com nutzen zu können. In dieser Situation würde ich brauche, um die HTTP_HOST als Variable beziehen zu können, anstatt es buchstäblich in der URL angeben, an den Anfragen weitergeleitet werden.

Ich werde den HTTP_HOST Parameter wie vorgeschlagen untersuchen, aber hatte gehofft, für ein funktionierendes Beispiel.

War es hilfreich?

Lösung

Es ist seltsam, dass niemand die tatsächliche getan hat Arbeit Antwort (lol):

RewriteCond %{HTTP_HOST} support\.(([^\.]+))\.example\.com
RewriteRule ^/terms http://support.%1/article/terms [NC,QSA,R]

Damit Sie den Job schneller, mein Lieblingswerkzeug für regexp überprüfen:

http://www.quanetic.com/Regex (vergessen Sie nicht ereg zu wählen ( POSIX) anstelle von preg (PCRE)!)

Mit diesem Werkzeug, wenn Sie die URL überprüfen und sehen, ob sie gültig sind oder nicht.

Andere Tipps

Ich glaube, Sie werden den HTTP_HOST Wert erfassen möchten und dass dann in der Rewrite-Regel verwenden:

RewriteCond %{HTTP_HOST} (.*)
RewriteRule ^/terms http://support.%1/article/terms [NC,R=302]

Wenn ich Ihre Frage richtig verstanden, möchten Sie eine 301-Weiterleitung (sagen Browser auf andere URL zu gehen). Wenn meine Lösung nicht das richtige für Sie ist, versuchen Sie dieses Werkzeug: http://www.htaccessredirect.net/ index.php und herauszufinden, was für Sie arbeitet.

//301 Redirect Entire Directory
RedirectMatch 301 /terms(.*) /articles/terms/$1

//Change default directory page
DirectoryIndex 

Nach diesem Spickzettel ( http: //www.addedbytes .com / download / mod_rewrite-Spickzettel-v2 / png / ) sollte dies funktionieren

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain2.com/$1

Beachten Sie, dass ich das nicht eine Möglichkeit haben, zu testen, damit diese als Zeiger in die richtige Richtung unternommen werden sollte, wie auf eine explizite Antwort gegenüber.

Wenn Sie auf demselben Server bleiben dann dieses in der .htaccess setzen, unabhängig von dem Server funktionieren:

RedirectMatch 301 ^/terms$ /articles/terms/

Erzeugt:

http://example.com/terms -> http://example.com/articles/terms

oder:

http://test.example.com/terms -> http://test.example.com/articles/terms

Natürlich müssen Sie die REGEX Anpassung einzustellen und dergleichen, um sicherzustellen, es meistert mit dem, was Sie an ihm werfen werden. Das Gleiche gilt für die 301, Sie könnten eine 302 wollen, wenn Sie die Umleitung cachen nicht Browsern wollen.

Wenn Sie wollen:

http://example.com/terms -> http://server02.example.com/articles/terms

Dann müssen Sie den HTTP_HOST Parameter verwenden.

Sie müssen diese Informationen nicht enthalten. Geben Sie einfach einen URI relativ zum Stamm.

Redirect temp /terms /articles/terms/

Dies erklärt sich in der mod_alias Dokumentation :

  

Die neue URL sollte eine absolute URL sein mit einem Schema und die Hostnamen beginnen, aber ein URL-Pfad mit einem Schrägstrich beginnen, kann auch verwendet werden, wobei in diesem Fall die Regelung und die Hostnamen des aktuellen Servers hinzugefügt werden.

Es klingt wie das, was Sie wirklich brauchen, ist nur ein Alias?

Alias /terms /www/public/articles/terms/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top