2010-11-18 6 views
2

je voudrais raccourcirhtaccess url raccourcissement

www.site.com/product/info/laptop à www.site.com/laptop

je

RewriteRule ^(.+)$ /product/info/$1 

mais je reçois 500 Erreur interne du serveur

lorsque j'essaye,

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

cela fonctionne mais je veux aussi supporter la période, donc quand je l'ai inclus.

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

Il me donne 500 Erreur serveur interne

Pouvez-vous expliquer ce qui se passe?

Merci

+0

Pourquoi les guillemets doubles? l'expression devrait être [a-zA-Z0-9_ \ s \ '~%,:!?() \ ._ = & -] + –

Répondre

0

les opérations suivantes:

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

qui redirige le navigateur de www.example.com/product/info/laptop à www.example.com/laptop~~V~~3rd avec un « Déplacé En-tête "en permanence".

Si vous souhaitez vous dire l'URL plus courte pour pointer vers l'URL plus interne, vous devez éviter les redirections circulaires:

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

La première ligne cessera d'essayer de rediriger www.example.com/product/ info/portable à www.example.com/product/info/product/info/laptop, et ainsi de suite.

Modifier

Sur la base de votre commentaire, il semble que vous aussi essayer de rediriger tout sauf img, phpmyadmin, etc, pour indexer tout - Vous devez réorganiser tout un peu maintenant, quelque chose comme ceci:

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 

Je ne suis pas à 100% sur le « produit/informations /(.*) » partie de la première réécriture. Si cela ne fonctionne pas, essayez ceci:

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

réponse finale en fonction de votre commentaire:

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

Merci beaucoup pour votre aide. Je souhaite l'URL plus courte pour pointer vers l'URL plus à l'intérieur, donc mon htaccess ressemble maintenant – user257867

+0

RewriteEngine sur RewriteCond% {REQUEST_URI} ^/produit/informations /(.*)$ RewriteRule^produit/info /. * $ - # ne pas rediriger à nouveau RewriteRule^(.*) $/product/info/$ 1 # rediriger tout le reste RewriteCond $ 1!^(index \ .php | img | phpmyadmin | images | utilisateur | wmd | FCKeditor | carte | jscalendar | aurigma | xajax_js | css | js | comprennent | floatbox | helper | | ajax styles | robots \ txt | favicon \ Ico) RewriteRule^(*) /index.php?$1 $ [L] mais maintenant cela me donne erreur Server.! Le serveur a rencontré une erreur interne et n'a pas pu terminer votre requête. Soit le serveur est surchargé, soit il y a une erreur. – user257867

+0

J'ai mis à jour la réponse ci-dessus - vous devez garder ces [L] en place, sinon cela continuera à traiter d'autres règles. –