Ich weiß zum Beispiel, wie man URLs umschreibt: www.example.com/index.php?id=1&cat=3
zu www.example.com/1/3/
(oder was auch immer). Ich weiß das.
Was ich nicht weiß, ist, wie ich meine gesamten Links auf allen Seiten so ändern kann, dass sie auf schöne URLs verweisen. Alle Links auf meiner Website sind altmodisch ( <a href="index.php?id=1&cat=2">
) und davon gibt es viele.
Ich frage, ob jemand eine Idee hat oder weiß, wie man automatisch auf diese hübsche URL umleitet, wenn der Benutzer auf index.php?id=1 klickt (fast wie diese Website Stackoverflow, wenn Sie den Titel in der URL ändern).
Meine Vermutungen sind also...
-
Verwenden Sie .htaccess, um die index.php?id=1&cat=2 zu lesen, um index/1/3 umzuschreiben, das selbst wieder interpretiert (seltsam)
-
eine php-Datei, die die Umleitungen vornimmt, die htaccess wieder in das Original zurückschreibt...
Schlussfolgerung: Veränderung <a href="index.php?id=1&.....">
automatisch zu index/1/2
GELÖST
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
##################################
# This turns index.php?id=1&cat=2 into index/1/2 and then back 'transparent' into index.php?id=1&cat=2 if you have old fashioned
# links in your site and don't want to change them :)
# Avoid mod_rewrite infinite loops
# This is critical if you want to use this code
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]
# Hard-rewrite ("[R]") to "friendly" URL.
# Needs RewriteCond to match original querystring.
# Uses "?" in target to remove original querystring,
# and "%n" backrefs to move its components.
# Target must be a full path as it's a hard-rewrite.
RewriteCond %{QUERY_STRING} ^id=(\d+)&cat=(\d+)$
RewriteRule ^index.php$ http://localhost/index/%1/%2/? [L,R]
# Soft-rewrite from "friendly" URL to "real" URL.
# Transparent to browser.
# Won't re-trigger the above rewrite, though I'm
# not really sure why! The order of the rules
# doesn't seem to make a difference.
RewriteRule ^index/(\d+)/(\d+)/$ index.php?id=$1&cat=$2 [L]