2009-10-14 3 views
0

sur mon site web je veux changer (juste exemple) de d'url:Comment empêcher la réécriture des attributs href lors de la réécriture d'URL?

site.com/showCategory.php?catId=34 

à:

site.com/category/34/ 

Voici le contenu de mon fichier .htaccess:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteRule ^affichage/([0-9]+)$ /affichage/$1/ [R] 
    RewriteRule ^affichage/([0-9]+)/$ /affichage.php?n=$1 
</IfModule> 

Cela fonctionne, mais le problème est que toutes les URL (balise href) dans affichage.php ont "/ affichage/29 /" et la source pour le fichier css devient http://www.site.com/category/34/css/style.css.

+0

remercient pour éditer l'accord post –

Répondre

3

j'ajouter à exclure css et d'autres fichiers que je veux directement accessible:

RewriteCond %{REQUEST_FILENAME} !\.(php|ico|png|jpg|gif|css|js|gz|html?)(\W.*)? 

Ou, pour exclure par le nom du répertoire:

RewriteCond %{REQUEST_FILENAME} !^/(css|js|static|images)(/.*) 
+0

+1. bon. – mauris

+0

-1 C'est un non-sens. Le client résout les URL relatives dans le document et non le serveur. – Gumbo

+0

Cela dépend de ce que son problème est vraiment ici. S'il a un CSS commun, il doit inclure n'importe où il est par rapport à /, c'est la façon de le faire. C'est mon scénario le plus commun. –

0

Vous devrez écrire l'URL à nouveau. Cependant, une bonne pratique consiste à l'emballer avec une fonction.

.: par exemple

<a href="<?php rewritefunc('affichage.php',array('n'=>29)); ?>">This URL</a> 
<?php 
    $do_rewrite = true; 

    function rewritefunc($file,$params){ 
    $ret = ''; 
    switch(strtolower($file)){ 
     case 'affichage.php': 
     if($do_rewrite){ 
      $ret = 'affichage/'.$params['n'].'/'; 
     }else{ 
      $ret = 'affichage.php?'.http_build_query($params); 
     } 
    } 
    return $ret; 
    } 
?> 

Utilisation de l'instruction switch vous pouvez ajouter plus parsing url. Avec cette fonction wrapper, vous pouvez également basculer facilement entre les anciennes et les nouvelles URL.

0

Ceci est un problème de résolution d'URL. Vous devez utiliser des URL absolues (ou au moins des URL absolues) lorsque vous référencez vos ressources externes. Utilisez le chemin d'URL absolu /css/… au lieu d'un parent css/… ou ./css/….

Ou vous modifiez l'URL de base à partir de laquelle les URL relatives sont résolues avec BASE HTML element. Mais notez que cela affectera toutes les URL relatives. Voir aussi Problem using URL rewrite (Relative Paths not working) et mod_rewrite URL info required.