Frage

Ok, ich schreibe einige Seiten -URLs für einen benutzerdefinierten PHP -Wagen neu.

Ich habe die folgenden Regeln:

RewriteRule ^category/([0-9]+)/([a-z-]+)$ /store.php?cat=$1 [L]
RewriteRule ^product/([0-9]+)/([a-z-]+)$ /product.php?id=$1 [L]

Auf diese Weise kann ich eine URL-Struktur wie example.com/product/23/product-slug verwenden.

Dieser Teil funktioniert in Ordnung. Ich frage mich, welche Optionen ich für die andere Richtung habe. Umleiten von Anfragen nach der alten URL zur neuen URL. Wenn also jemand zu /product.php?id=2 geht, möchte ich zu /products /2 /slug umleiten.

Irgendeine Idee, wie man das erledigt?

Ich habe eine einfache Weiterleitung ausprobiert, würde aber nicht funktionieren:

Redirect 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug
War es hilfreich?

Lösung 2

Ich habe dies anders gelöst: mit einer Änderung der Datei Store.php.

Ich habe die Ausgabe von angesehen von print_r($_SERVER) Nach dem Ping sowohl die normalen als auch die umgeschriebenen URLs. ich habe das gefunden $_SERVER['SCRIPT_URL'] Enthält "/store.php", wenn die normale URL getroffen wird, und sie enthält meinen umgeschriebenen Weg, wenn die umgeschriebene URL getroffen wird.

Dies bedeutet, dass ich einen einfachen Test durchführen und angemessen umleiten kann:

if ($_SERVER['SCRIPT_URL'] == "/store.php") {
    // run some code that will generate the url
    $rewrittenURL = generateURL();
    // then add:
    header("HTTP/1.0 301 Moved Permanently"); // tell spiders this is permanent
    header("Location: $rewrittenURL");
}

Andere Tipps

Umleitung nimmt nur ein URL -Präfix ein, nicht einen Regex (z. B. Store.php oder /Store)

Sie müssen versuchen, redirectMatch zu versuchen:

RedirectMatch 301 ^/store\.php\?cat=16$ http://www.example.com/category/16/category-slug

Soll es auch mit A /beginnen? Ich bin mir nicht sicher (Ihre Rewriterule -Einträge oben beginnen beispielsweise ohne Schrägstrich)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top