2016-06-22 6 views
0

Ich habe eine alte Stelle, wo ich Unterstrichen und eine HTML-Erweiterung, die ichURL-Umleitung - Ordner zu ändern, zu ersetzen Unterstrichen mit Bindestrichen und Entfernen von HTML-Erweiterung

http://example.com/news/this_is_a_test.html -> http://example.com/post/this-is-a-test 

http://example.com/portfolio/another_test.html -> http://example.com/project/another-test 
auf folgende Weise umleiten möchten

Es gibt andere Ordner Abgesehen von News und Portfolio und eindeutig hat das letzte Segment der URL eine unbekannte Anzahl von Unterstrichen.

Hier ist der .htaccess, den ich gerade benutze (basierend auf meiner ursprünglichen Frage htaccess file to remove folder, and replace underscores with dashes). Es funktioniert für das Nachrichtenbeispiel, aber bricht, wenn ich für Portfolio versuche.

Irgendeine Idee, wo ich falsch liege?

RewriteEngine on 

# redirect "/news_bar" to "/foo_bar" 
RewriteRule ^news/(.+)$ /$1 [L,R] 
#2 replace underscore with hypens 
RewriteRule (.*)_(.*) $1-$2 [N,E=uscores:yes] 
RewriteCond %{ENV:uscores} yes 
RewriteRule ^(.+)$ /post/$1 [L,R] 

RewriteRule ^portfolio/(.+)$ /$1 [L,R] 
RewriteRule (.*)_(.*) $1-$2 [N,E=uscores:yes] 
RewriteCond %{ENV:uscores} yes 
RewriteRule ^(.+)$ /project/$1 [L,R] 

# remove .html from end of url 

RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC] 
RewriteRule^/%1 [NC,L,R] 
RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule^%{REQUEST_URI}.html [NC,L] 

Vielen Dank!

Antwort

1

Ich hatte vorher eine solution, aber es bricht auf meinem aktuellen Setup (Apache stürzt ab), und so wäre es unklug von mir, es für Ihren Fall zu empfehlen. (Es könnte ein Problem mit meinem Setup sein, aber ich würde Ihnen lieber eine einfachere Route geben.)

Diese Lösung beinhaltet das Senden der relevanten Anfragen an eine PHP-Datei, die die notwendigen Ersetzungen vornehmen und umleiten wird einmal nur. Beachten Sie, dass Ihre aktuelle Implementierung mehrere Umleitungsbefehle an den Browser sendet. Dies ist nicht nur vom Standpunkt der Benutzerfreundlichkeit schlecht, sondern auch von einem SEO-Standpunkt.

die Lösung implementieren, starten, indem Sie Ihre .htaccess Richtlinien mit diesem ersetzen:

RewriteEngine On 

# Rewrite news and portfolio links to redirect.php 
RewriteRule ^(news|portfolio)/(.+).html /redirect.php [L] 

Erstellen Sie dann eine redirect.php-Datei im selben Verzeichnis wie die .htaccess-Datei (in diesem Fall das Dokument root), und fülle es mit dieser einfachen Ersetzungsmethode und Redirect-Anweisung:

<?php 

$path = $_SERVER['REQUEST_URI']; 

# Perform the necessary replacements. The first array contains 
# what we're searching for, bit by bit, and the second array 
# contains the relevant replacements. 
$path = str_replace(
    ['_', '/news/', '/portfolio/', '.html'], 
    ['-', '/post/', '/project/', ''], 
$path); 

# Now, simply redirect to the new path. 
# Change 302 to 301 use a "Moved Permanently" header, 
# resulting in browsers and search engines caching 
# the redirect. 
header("Location: $path", true, 302); 
+0

Hallo Mike, vielen Dank für Ihre Hilfe. Ich wollte kein PHP verwenden, aber das ist sicherlich eine Option !!! Denken Sie, dass es die optimale Lösung für diesen Fall ist? – Newfoundland

+0

Meine ursprüngliche Lösung wäre optimaler gewesen, da alles fertig ist, bevor etwas an PHP gesendet wird. Das heißt, die Menge der verwendeten Ressourcen ist wirklich nichts, worüber man sich Sorgen machen müsste, und diese Route sollte auf jedem Server blitzschnell sein. Beachten Sie auch die Tatsache, dass ich hier keine regulären Ausdrücke verwende, die mehr Ressourcen benötigen als einfache String-Ersetzungen. –

+1

Hallo, vielen Dank für Ihre Rückmeldung - ich werde PHP verwenden - funktioniert gut. Vielen Dank für Ihre Hilfe – Newfoundland

Verwandte Themen