Seite 1 von 1

Rewrite Rule

Verfasst: 18.04.2008, 06:28
von emel
Ich habe da ein Problemchen mit einer RewriteRule

Code: Alles auswählen

RewriteEngine on
RewriteBase /
RewriteRule ^(.*)/page/([1-9]+)/$ $1/category/page/$2/ [L]

Die Regel soll URLs von
www.domain.tld/theme/page/2 auf www.domain.tld/category/theme/page/2 umleiten. Leider tut sie das nicht :(
Was mache ich falsch?

selbst eine einfache variante für nur eine einzige url funktioniert nicht:

Code: Alles auswählen

Rewrite Rule www.domain.tld/theme/page/2 www.domain.tld/category/theme/page/2 [L] 

Verfasst:
von

Verfasst: 18.04.2008, 18:15
von Southmedia
Du gehst das ein wenig falsch an würde ich sagen.

Ich notiere mir immer erstmal worum es eigentlich geht:

Von: https://www.domain.tld/theme/page/2
Nach: https://www.domain.tld/category/theme/page/2

Also soll ja effektiv nur ein "category/" eingefügt werden. Das sähe dann zum Beispiel so aus:

RewriteRule ^(.*)$ https://www.domain.tld/category/$1 [L]

Je nach dem, ob du wirklich eine Weiterleitung (301, 302 etc) haben möchtest musst du dann noch ",R=301" hinter dem L einfügen.

Wenn dein Umleitungswunsch natürlich komplexer oder einfach anders ist, sieht die Rule wiederum anders aus. Zusätzlich sollte man noch per RewriteCond die Umleitung auf bestimmte URLs (Zum Beispiel alle die 'theme' enthalten, wie auch immer gewünscht) beschränken.

Ok?

Verfasst: 18.04.2008, 18:46
von emel
Du hast recht. Im Prinzip möchte ich nur ein category einfügen.

Leider bekomme ich mit der von dir angegebenen RewriteRule einen Internal Server Error.

Zwischenzeitlich hatte ich noch folgendes versucht

Code: Alles auswählen

RewriteRule ^[^/]+/page/[1-9][0-9]*/$ /category/$0 [L]
Das sollte es eigentlich auch tun, nur:

ist meine .htaccess bereits mit folgenden zeilen gefüllt:

Code: Alles auswählen

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase 
RewriteRule ^&#91;^/&#93;+/page/&#91;1-9&#93;&#91;0-9&#93;*/$ /category/$0 &#91;L&#93;
RewriteCond %&#123;REQUEST_FILENAME&#125; !-f
RewriteCond %&#123;REQUEST_FILENAME&#125; !-d
RewriteRule . /index.php &#91;L&#93;
</IfModule>
das zusammenspiel mit dem Rest scheint mir nicht ganz sauber zu sein :(

Vielleicht hierzu noch eine Idee?

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 18.04.2008, 18:59
von Southmedia
Natürlich, ich hatte da ne Endlosschleife gebastelt ;) Da muss natürlich noch ne RewriteCond davor:

Code: Alles auswählen

RewriteCond %&#123;REQUEST_URI&#125; !^/category/
RewriteRule ^&#40;.*&#41;$  http&#58;//www.domain.tld/category/$1 &#91;L&#93; 
Demnach sollte sich bei dir folgender Code ergeben:

Code: Alles auswählen

RewriteEngine On

RewriteCond %&#123;REQUEST_URI&#125; !^/category/
RewriteRule ^&#40;.*&#41;$  http&#58;//www.domain.tld/category/$1 &#91;L&#93;

RewriteCond %&#123;REQUEST_FILENAME&#125; !-f
RewriteCond %&#123;REQUEST_FILENAME&#125; !-d
RewriteRule . /index.php &#91;L&#93;

Verfasst: 18.04.2008, 19:37
von emel

Code: Alles auswählen

RewriteEngine On
RewriteBase /

RewriteCond %&#123;REQUEST_URI&#125; !^/category/
RewriteRule ^&#40;.*&#41;$  http&#58;//www.domain.tld/category/$1 &#91;L&#93;

RewriteCond %&#123;REQUEST_FILENAME&#125; !-f
RewriteCond %&#123;REQUEST_FILENAME&#125; !-d
RewriteRule . /index.php &#91;L&#93;
Habe noch die RewriteBase ergänzt, aber leider immer noch mit internal server error.

Logfile sagt:

Code: Alles auswählen

&#91;Fri Apr 18 20&#58;33&#58;43 2008&#93; &#91;error&#93; &#91;client xx.xx.xxx.xxx&#93; mod_rewrite&#58; maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary.
Kann man das evlt. noch etwas besser loggen?

Vielleicht ist auch noch folgendes interessant. Ich habe in meiner apache conf folgende einstellungen auf das DocumentRoot der Domain

Code: Alles auswählen

Options FollowSymLinks -Multiviews
AllowOverride All

Verfasst: 18.04.2008, 19:47
von chris21
Hi, kommt leider dadurch zustande, dass mit obigen Regeln z.B. auch die index.php umgeschrieben werden soll.

Wenn ich das richtig sehe, geht es um einen Wordpressblog, bei dem die Pagination falsch verlinkt war und umgeleitet werden soll. Normale Category und Artikel-URLs jedoch nicht.

Dann würde ich vorschlagen:

Code: Alles auswählen

RewriteEngine On
RewriteBase /

RewriteCond %&#123;REQUEST_URI&#125; !^/category/
RewriteRule ^&#40;&#91;a-z0-9-&#93;+&#41;/page/&#40;&#91;0-9&#93;+&#41;$  http&#58;//www.domain.tld/category/$1/page/$2 &#91;L&#93;

RewriteCond %&#123;REQUEST_FILENAME&#125; !-f
RewriteCond %&#123;REQUEST_FILENAME&#125; !-d
RewriteRule . /index.php &#91;L&#93;
Derzeit wird dabei angenommen, dass das "theme" nur aus Buchstaben (klein,groß), Zahlen und dem Minus (als Bindestrich) bestehen kann. Denke, dass dies Wordpressstandard ist.

Ist nur im Kopf entwickelt, habe hier gerade keinen Wordpres-Blog parat, um es zu testen.

Edit: kleinen Fehler im Code beseitigt. @ 20:49

Verfasst: 18.04.2008, 20:08
von emel
BINGO! Es geht um genau dieses Wordpress-Problem

und zwar habe ich ein Plugin im Einsatz welches mir die /category/ bei normalen Einträgen entfernt. Allerdings laufen nur die page/2 etc. Links ins Leere, für die sowie die feed-Links der Kategorien muss die /category/ wieder in die URL gebracht werden.

Dein Vorschlag löst es aber leider auch nicht. Es gibt auch keinen Eintrag im Error-Log, man muss das Problem doch weiter einkreisen können, oder?

Verfasst: 18.04.2008, 20:18
von chris21
Kein Eintrag bedeutet ja, dass die RewriteRule gar nicht "greift", d.h. beim Suchmuster oder durch die RewriteCond gibt es noch einen Fehler.

Da die RewriteCond läuft (siehe Jans Beispiel und deinen Error-Log dazu), versuch mal folgendes:

Code: Alles auswählen

RewriteEngine On
RewriteBase /

RewriteCond %&#123;REQUEST_URI&#125; !^/category/
RewriteRule ^/&#40;&#91;a-z0-9-&#93;+&#41;/page/&#40;&#91;0-9&#93;+&#41;$  http&#58;//www.domain.tld/category/$1/page/$2 &#91;L&#93;

RewriteCond %&#123;REQUEST_FILENAME&#125; !-f
RewriteCond %&#123;REQUEST_FILENAME&#125; !-d
RewriteRule . /index.php &#91;L&#93; 
(Es wurde nur ein Slash eingefügt).

Wie sind nochmal die feed-Adressen? Etwa "/category/theme/feed"?

Dann müsste der Code noch so erweitert werden:

Code: Alles auswählen

RewriteEngine On
RewriteBase /

RewriteCond %&#123;REQUEST_URI&#125; !^/category/
RewriteRule ^/&#40;&#91;a-z0-9-&#93;+&#41;/page/&#40;&#91;0-9&#93;+&#41;$  http&#58;//www.domain.tld/category/$1/page/$2 &#91;L&#93;

RewriteCond %&#123;REQUEST_URI&#125; !^/category/
RewriteRule ^/&#40;&#91;a-z0-9-&#93;+&#41;/feed$  http&#58;//www.domain.tld/category/$1/feed &#91;L&#93;

RewriteCond %&#123;REQUEST_FILENAME&#125; !-f
RewriteCond %&#123;REQUEST_FILENAME&#125; !-d
RewriteRule . /index.php &#91;L&#93; 

Verfasst: 19.04.2008, 06:29
von emel
Leider auch nicht. Ich habe auch das Gefühl das die Regeln gar nicht greifen.
Habe das [L] gegen ein [R] getauscht um die Weiterleitung zu sehen. Da tut sich nichts.

Die erste Regel

Code: Alles auswählen

RewriteRule ^&#40;.*&#41;$ http&#58;//www.domain.tld/category/$1 &#91;L&#93; 
hat vermutlich nur einen internal server error erzeugt, weil alle URL umgeleitet wurden er so in einer Endlosschleife hing.
Komischerweise bekomme ich den Fehler auch wenn ich:


Code: Alles auswählen

RewriteCond %&#123;REQUEST_URI&#125; !^/category/
davor einfüge.

Hmm. Ich denke mal es läuft so: Ich füge mit der RewriteRule ein /category/ ein und das PlugIn welches ich einsetze entfernt es wieder.

d.h. das problem ist vielleicht nur durch das Ändern des Plug-Ins lösbar.
BTW. ich verwende das top level Categories plugin von fortes.com