2012-09-13 7 views
17

Ich möchte den Unterschied zwischen Umleiten und Umschreiben einer URL mit .htaccess verstehen. Also hier ist ein Beispiel: Angenommen, ich habe einen Link wie www.abc.com/ index.php?page=product_types&cat=88 (dies nennen das „Original“ url)Unterschied zwischen Redirect und Rewrite verstehen .htaccess

Aber wenn der Benutzer in abc.com/shoes (wir nennen dies die „gewünschte“ url), müssen sie den Inhalt sehen der obigen Verbindung. Um dies zu erreichen, würde ich Folgendes tun:

Nichts ist falsch mit diesem Code und es macht den Trick. Wenn ich jedoch die ursprüngliche URL in die Adressleiste eingabe, wird der Inhalt angezeigt, aber die URL ändert sich nicht. So bleibt es als www.abc.com/index.php?page=product_types&cat=88

Aber was, wenn ich wollte die gewünschte URL (/shoes) in der Adressleiste angezeigt, wenn ich www.abc.com/ index.php?page=product_types&cat=88 eintippte? Wie würde dies mit .htaccess erreicht werden? Gehe ich in eine mögliche Schleife?

+2

Ja, ich würde dies in PHP tun. Der .htaccess könnte in der Theorie funktionieren, aber wenn Sie dies viele Male machen, wird es immer schwieriger, die Reihenfolge der Weiterleitungen zu verwalten, um eine Schleife zu vermeiden. Ich weiß, es tut weh, aber es könnte sich lohnen, das Request-Routing aufzubauen, um hübsche URLs innerhalb der Anwendung zu unterstützen. –

+0

Ich denke, ich bekomme es @JoeMills.Aus SEO-Sicht, frage ich mich, ob es eine Gefahr bei der Umleitung der ursprünglichen URL -> gewünscht aus der App gibt? – Ray

Antwort

25

kann einen Teil der Erklärung hier: https://stackoverflow.com/a/11711948/851273

Der Kern ist, dass ein Umschreiben ausschließlich auf dem Server geschieht, ist der Client (Browser), um es blind. Der Browser sendet eine Anfrage und bekommt Inhalt, es ist nicht klüger, was auf dem Server passiert ist, um die Anfrage zu bedienen.

Eine Weiterleitung ist ein Server Antwort auf eine Anfrage, die den Client (Browser) anweist, eine neue Anfrage zu senden. Der Browser fragt nach einer URL, diese URL befindet sich in der Adressleiste, der Server erhält diese Anfrage und antwortet mit einer Weiterleitung, der Browser erhält die Antwort und lädt die URL in die Antwort des Servers. Die URL in der Adressleiste ist nun die neue URL und der Browser sendet eine Anfrage für die neue URL.

Einfach intern auf dem Server neu schreiben tut nichts mit URLs in der Wildnis. Wenn google oder reddit oder eine andere Website einen Link zu www.abc.com/index.php?page=product_types&cat=88 hat, tut dies Ihre interne Server-Umschreibungsregel absolut nicht, weder für jemanden, der auf diesen Link klickt, noch für irgendeinen anderen Client, der diese URL aus irgendeinem Grund anfordert. Die gesamte Rewrite-Regel ändert intern etwas, das shoes zu /index.php?page=product_types&cat=88 innerhalb des Servers enthält.

Wenn Sie möchten, dass es eine Anfrage für die index.php Seite mit allen Abfragezeichenfolgen gemacht wird, können Sie den Client (Browser) an umleiten, um die schönere URL umleiten. Sie müssen vorsichtig sein, da die Regeln neu geschrieben werden und Ihre Weiterleitung intern neu geschrieben wird, was eine Umleitung verursacht, die intern neu geschrieben wird, etc .., was eine Schleife verursacht und einen 500 Server Error auslöst. So können Sie sich speziell auf die Anforderung selbst entsprechen:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?page=product_types&cat=88 
RewriteRule ^/?index.php$ /shoes [L,R=301] 

Dies sollte nur verwendet werden, um es zu machen, so Links in der freien Natur an der richtigen Stelle spitzen bekommen. Sie müssen sicherstellen, dass der Inhalt die richtigen Links generiert. Das bedeutet, dass auf Ihrer Website der Link /shoes statt /index.php?page=product_types&cat=88 verwendet wird.

+0

Perfekt! Genau nach was ich suche! Danke, @Jon – Ray

+0

Ich habe die andere Antwort, die Sie verlinkt haben, nicht gesehen, da ich nur nach akzeptierten Antworten innerhalb des .htaccess-Tags gesucht habe – Ray