2009-06-04 8 views
0

J'ai un défi en utilisant Apache.Htaccess URL réécrire question

Dans mon fichier .htaccess Je voudrais convertir des demandes similaires:

url/portfolio/filename.htm

à:

url nom

Des preneurs? Merci pour votre temps

+0

Veuillez être un peu plus précis. Que signifie "url" dans votre exemple? Et le "portefeuille" est-il fixé? – Gumbo

Répondre

0

Quelque chose comme ça devrait fonctionner, même si je ne l'ai pas testé.

<IfModule mod_rewrite.c> 
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# Rewrite all other URLs to index.php/URL 
RewriteRule ^(.*)/portfolio/(.*)\.htm$ $1?$2 [PT,L] 


</IfModule> 
<IfModule !mod_rewrite.c> 
    ErrorDocument 404 index.php 
</IfModule> 
+0

Alec, merci beaucoup pour la réponse rapide. Je l'ai essayé et ça ne semble pas fonctionner, alors j'ai utilisé un testeur de regex pour voir ce qui pourrait être en place ... est-ce qu'il y a une chance de 'collision avec le délimiteur' avec ça? Thx D –

1

Vous avez plusieurs choix, selon la manière dont vous souhaitez que l'URL apparaisse aux visiteurs (et aux moteurs de recherche).

Si vous souhaitez que l'URL visible à l'extérieur reste url/portfolio/filename.htm, la solution Alec a fonctionné après avoir supprimé les deux lignes RewriteCond.

RewriteEngine On 

RewriteRule ^(.*)/portfolio/(.*)\.htm$ $1?$2 [PT,L] 

Si d'autres paramètres pourraient être dans la chaîne de requête et que vous voulez préserver ceux-ci, ajouter QSA aux options entre parenthèses à la fin de la règle.

Si vous voulez que les gens à l'extérieur pour voir url?filename au lieu, changer la règle:

RewriteRule ^(.*)/portfolio/(.*)\.htm$ $1?$2 [L,R] 

qualification Même sur les autres paramètres de la requête applique.

Si cela ne vous aide toujours pas, je vous suggère d'activer la journalisation des réécritures et de rechercher dans ce journal d'autres indices. Postez-les ici et quelqu'un vous aidera. Vous devrez peut-être mettre cette partie dans httpd.conf. Mon Apache n'a pas aimé dans .htaccess.

RewriteLog ...path... 
RewriteLogLevel 3 # you'll regret anything higher 
0

Cela devrait fonctionner:

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^portfolio/(.+)\.htm$ index.php?$1 [NC,L] 

ou si vous voulez changer visiblement il:

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ^portfolio/(.+)\.htm$ /?$1 [R,NC,L] 

Le second ressemblerait example.com/?filename à la utilisateur, alors que le premier ressemblerait à example.com/portfolio/filename.htm.

Espérons que ça aide.