2010-11-18 13 views
2

ich möchte.htaccess Verkürzung url

www.site.com/product/info/laptop verkürzen

I

RewriteRule ^(.+)$ /product/info/$1 
verwendet www.site.com/laptop

aber ich bekomme 500 Interner Serverfehler

wenn ich versuche,

RewriteRule ^([a-zA-Z0-9_\s\'~%,:!?()_=&-]+)$ /product/info/$1 

es funktioniert, aber ich möchte auch den Zeitraum unterstützen, also wenn ich mit einschließe.

RewriteRule ^([a-zA-Z0-9_\s\'~%,:!?()\._=&-]+)$ /product/info/$1 

Es gibt mir 500 Internal Server Error

Können Sie uns erklären, was los ist?

Danke

+0

Warum die doppelten Anführungszeichen? der Ausdruck sollte [a-zA-Z0-9_ \ s \ '~%,:!?() \ ._ = & -] + –

Antwort

0

Versuchen Sie Folgendes:

RewriteCond %{REQUEST_URI} ^/product/info/(.*)$ 
RewriteRule ^(.*)?$  /%2     [R=301,L] 

, dass der Browser von www.example.com/product/info/laptop umleiten wird mit einem „Umzug nach www.example.com/laptop Permanent "Kopfzeile.

Wenn Sie meinen, Sie die kürzere URL wünschen intern auf die längere URL zu verweisen, müssen Sie Kreis Umleitungen vermeiden:

RewriteRule ^product/info/.*$ -    [L] # don't redirect again 
RewriteRule ^(.*)$   /product/info/$1 [L] # redirect everything else 

Die erste Zeile www.example.com/product/ umleiten wird aufhören zu versuchen, Info/Laptop zu www.example.com/product/info/product/info/laptop und so weiter.

bearbeiten

Basierend auf Ihren Kommentar, es sieht aus wie Sie auch umleiten alles außer img, phpMyAdmin, etc, zu indizieren versuchen, was auch immer? - Sie haben es neu zu ordnen alles ein bisschen jetzt, etwas wie folgt aus:

RewriteEngine on 

RewriteCond %{REQUEST_URI} ^/(index\.php|img|phpmyadmin|images|user|wmd|FCKeditor|map|jscalendar|aurigma|xajax_js|css|js|include|floatbox|helper|styles|ajax|robots\.txt|favicon\.ico|product/info/(.*)) 
RewriteRule ^(.*)$ - [L] # don't redirect these 

RewriteRule ^(.*)$ /product/info/$1 # redirect everything else 

ich bin nicht 100% auf das "Produkt/Infos /(.*)" Teil des ersten Rewrite. Wenn das nicht funktioniert, versuchen Sie dies:

RewriteEngine on 

RewriteCond %{REQUEST_URI} ^/(index\.php|img|phpmyadmin|images|user|wmd|FCKeditor|map|jscalendar|aurigma|xajax_js|css|js|include|floatbox|helper|styles|ajax|robots\.txt|favicon\.ico) 
RewriteRule ^(.*)$ - [L] # don't redirect these 

RewriteRule ^product/info/.*$ -    [L] # don't redirect again 

RewriteRule ^(.*)$ /product/info/$1 [L] # redirect everything else 

Edit 2

endgültige Antwort basierend auf Ihren Kommentar:

RewriteEngine on 
RewriteCond %{REQUEST_URI} ^/(index\.php|img|phpmyadmin|images|user|wmd|FCKeditor|map|jscalendar|aurigma|xajax_js|css|js|include|floatbox|helper|styles|ajax|robots\.txt|favicon\.ico) 
RewriteRule ^(.*)$ - [L] # don't redirect these 

# pass controllers to index.php 
RewriteCond %{REQUEST_URI} ^/(home|browse|calendar|star|member|enter|product) 
RewriteRule ^(.*)$ /index.php?$1 [L] 

# pass other things than controllers to /index.php?/product/info/$1 
RewriteRule ^(.*)$ /index.php?/product/info/$1 [L] # redirect everything else 
+0

Vielen Dank für Ihre Hilfe. Ich wünsche, die kürzere URL intern auf die längere URL zu verweisen, so meine .htaccess sieht nun wie – user257867

+0

RewriteEngine auf RewriteCond% {REQUEST_URI} ^/product/info /(.*)$ RewriteRule^Produkt/info /. * $ - # nicht erneut umleiten RewriteRule^(.*) $/product/info/$ 1 # umleiten alles andere RewriteCond $ 1!^(index \ .php | img | phpmyadmin | bilder | benutzer | wmd | FCKeditor | karte | jscalendar | aurigma | xajax_js | css | js | umfassen | floatbox | Helfer | Arten | ajax | Roboter \ .txt | Favicon \ ICO) RewriteRule^(*) $ /index.php?$1 [L] aber jetzt mir das gibt Server-Fehler.! Der Server hat einen internen Fehler festgestellt und konnte Ihre Anfrage nicht abschließen. Entweder ist der Server überlastet oder es ist ein Fehler aufgetreten. – user257867

+0

Ich habe die obige Antwort aktualisiert - Sie müssen diese [L] 's beibehalten, sonst werden weitere Regeln verarbeitet. –