2016-09-14 2 views
1

Ich habe ein Gehirn verblassen und bitte etwas Hilfe. Ich bin mit 3 RewriteRules etwas zu erreichen, was ich denke, sollte nur eine nehmen:Kann ich diese 3 Rewrite-Regeln in 1 kombinieren?

RewriteRule ^([0-9]+)$ /bar/$1.html [R=301,L] 
RewriteRule ^([0-9]+)(-*)$ /bar/$1.html [R=301,L] 
RewriteRule ^([0-9]+)-([0-9]+)$ /bar/$1.html#$2 [R=301,NE,L] 

ich ergreifen müssen, um die folgenden URLs:

http://foo.com/100 
http://foo.com/100-1 
http://foo.com/200- 
http://foo.com/1999 
http://foo.com/1999-99 

... und schreiben Sie sie wie folgt:

http://foo.com/bar/100.html 
http://foo.com/bar/100.html#1 
http://foo.com/bar/200.html 
http://foo.com/bar/1999.html 
http://foo.com/bar/1999.html#99 

Was ich habe funktioniert aber scheint wie ein bisschen ein Hack. Gibt es eine Möglichkeit, all das in einer Regel zu kombinieren?

Antwort

1

Ich sehe keine Möglichkeit, alle drei Regeln in einer einzigen Regel zu kombinieren, weil die Ersetzungsstruktur nicht immer die gleiche ist, manchmal mit Hash erscheint und manchmal nicht erscheint. Sie können jedoch die ersten beiden Regeln kombinieren:

RewriteRule ^([0-9]+)-?$ /bar/$1.html [R=301,L] 

Die zweite Regel, die mit einem Hash-Symbol ersetzt, kann bleiben wie:

RewriteRule ^([0-9]+)-([0-9]+)$ /bar/$1.html#$2 [R=301,NE,L] 
+0

Oh, danke. Es ist jetzt so offensichtlich, dass Sie erwähnen, die ersten beiden zu kombinieren. Offensichtlich hatte ich es zu lange angeschaut. – TunaMaxx

1

Sie können alle 3 Regeln kombinieren in einem mit diesem Trick :

RewriteCond %{REQUEST_URI} ^/(\d+)-?(\d+)?$ 
RewriteCond %1#%2 ^(\d+)#$ [OR] 
RewriteCond %1#%2 ^(\d+)(#\d+)$ 
RewriteRule^/bar/%1.html%2 [R=301,L,NE] 
  • im ersten Zustand, passen wir RegexMuster, die mit einer Reihe von einem optionalen Bindestrich und weiteren optionalen nu gefolgt beginnen mber.
  • Die nächsten zwei Bedingungen verwenden [OR], also wird nur einer wahr sein.
  • Für URI /100 ist die erste Bedingung wahr und 100 wird in %1 erfasst, aber %2 ist leer.
  • Für URI /100-1 gilt die zweite Bedingung und 100 wird in %1 erfasst, aber %2 ist #1.
+0

Danke. Ich hätte tatsächlich eine ähnliche Lösung gefunden, aber in einigen Fällen störte mich das hängende "#". Ich weiß, dass es harmlos ist, dort zu sein, aber ich habe auf eine magische Lösung gehofft, bei der ich "eine Zeile" schreiben konnte, ohne die gelegentlichen leeren #. – TunaMaxx

+0

Magische Lösung ist möglich, leere '#' herauszunehmen, wird in wenigen Minuten aktualisiert. – anubhava

+0

Jetzt meine aktualisierte Regel ausprobieren. – anubhava

Verwandte Themen