2017-01-19 3 views
3

Ich versuche mehrere Pfade einige mit dynamischen Pfadnamen umleiten, die alles Mögliche sein können.Wie mehrere dynamische URLs mit Apache umleiten

Zum Beispiel:

Dies ist der Code, den ich jetzt habe.

RewriteEngine on 

RedirectMatch "^/" "http://www.bbb.ai/nl/" 
RedirectMatch "^/en/" "http://www.bbb.ai/en/" 

RedirectMatch "^/media/" "http://www.bbb.ai/nl/media/" 
RedirectMatch "^/media/(.*)" "http://www.bbb.ai/nl/media/" 
RedirectMatch "^/en/media/" "http://www.bbb.ai/en/media/" 
RedirectMatch "^/en/media/(.*)" "http://www.bbb.ai/en/media/" 

RedirectMatch "^/portfolio/" "http://www.bbb.ai/nl/media/" 
RedirectMatch "^/portfolio/(.*)" "http://www.bbb.ai/nl/media/" 
RedirectMatch "^/en/portfolio/" "http://www.bbb.ai/en/media/" 
RedirectMatch "^/en/portfolio/(.*)" "http://www.bbb.ai/en/media/" 

RedirectMatch "^/team/(.*)" "http://www.bbb.ai/nl/about-us" 
RedirectMatch "^/en/team/(.*)" "http://www.bbb.ai/en/about-us" 

Wie erreiche ich das?

Antwort

5

Der Code in Ihrer Frage deutet darauf hin, dass Sie möglicherweise zwei Techniken des URL-Rewriting verwechseln. RewriteEngine On bietet RewriteRule Funktionalität von mod_rewrite, aber RedirectMatch ist Teil von mod_alias.

Die richtige Verwendung sollte die richtige Lösung für Ihr Szenario ergeben, aber ich werde RewriteRule hier verwenden, also stellen Sie sicher, dass mod_rewrite auf Ihrem Server aktiviert ist. Ich habe auch eine Annahme gemacht, dass diese Regeln in Ihrer VirtualHost und nicht eine .htaccess Datei sind.

RewriteEngine on 

#/
RewriteRule "^/$" "http://www.bbb.ai/nl/" [R,L] 
RewriteRule "^/team/?$" "http://www.bbb.ai/nl/about-us" [R,L] 
RewriteRule "^/media/.+" "http://www.bbb.ai/nl/media/" [R,L] 
RewriteRule "^/portfolio/.+" "http://www.bbb.ai/nl/media/" [R,L] 

# /en 
RewriteRule "^/en/?$" "http://www.bbb.ai/en/" [R,L] 
RewriteRule "^/en/team/?$" "http://www.bbb.ai/en/about-us" [R,L] 
RewriteRule "^/en/media/.+" "http://www.bbb.ai/en/media/" [R,L] 
RewriteRule "^/en/portfolio/.+" "http://www.bbb.ai/en/media/" [R,L] 

an der Wurzel URLs wird der End-Anker $ verwendet, um sicherzustellen, dass sie nur umleiten, wenn nichts anderes vorhanden ist. Für Medien und Portfolio geben Sie in der Frage an, dass sie nur dann umleiten sollten, wenn ihnen etwas Dynamisches folgt.

Wenn Sie tatsächlich beide /portfolio und /portfolio/something-dynamic umleiten möchten, können Sie tun, so wie:

RewriteRule "^/en/portfolio(/.*)?" "http://www.bbb.ai/en/portfolio/" [R,L] 

Und da Medien und Portfolio haben beide das gleiche Ziel, könnten Sie eigentlich, wie unten kombinieren:

RewriteRule "^/en/(media|portfolio)/.+" "http://www.bbb.ai/en/media/" [R,L] 

Obwohl dies weniger Code ist, ist es auch weniger lesbar, also bedenken Sie dies beim Aktivieren der Regeln.

+0

Genau was ich brauchte danke :) –