2009-10-14 3 views
0

은 내가 (단지 exemple)에서 URL을 변경하려면 :URL을 다시 쓸 때 href 속성을 다시 쓰지 않으려면 어떻게해야합니까? 내 웹 사이트에

site.com/showCategory.php?catId=34 

에 :

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

:

여기
site.com/category/34/ 

내 htaccess로 파일의 내용입니다 그것은 작동하지만 문제는 affichage.php의 모든 URL (href 태그)에 "/ affichage/29 /"가 있고 css 파일의 소스가 http://www.site.com/category/34/css/style.css이됩니다. 디렉토리 이름 제외,

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

을 또는 :

+0

수정 사항은 –

답변

3

나는 CSS 및 기타 파일을 내가 직접 액세스 할 제외이 추가

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

+1에 대한 게시물입니다. 좋은 것. – mauris

+0

-1 그건 말도 안돼. 클라이언트는 문서가 아닌 서버의 상대 URL을 확인합니다. – Gumbo

+0

그것은 실제로 그의 문제가 무엇인지에 달려 있습니다. 그는 공통 CSS가있는 경우 상대방과 상관없이 포함시켜야합니다./이것이이 방법입니다. 그것이 가장 일반적인 시나리오입니다. –

0

당신은 밖으로 URL을 다시 작성해야합니다. 그러나 좋은 연습은 함수로 그것을 포장하는 것입니다. 더 많은 URL을 구문 분석을 추가 할 수 있습니다 switch 문을 사용하여

예컨대 :

<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; 
    } 
?> 

. 또한이 래퍼 기능을 사용하면 이전 URL과 새 URL을 쉽게 전환 할 수 있습니다.

0

이것은 URL 문제입니다. 외부 리소스를 참조 할 때는 절대 URL (또는 절대 URL 경로)을 사용해야합니다. 상대 css/… 또는 ./css/… 대신 절대 URL 경로 /css/…을 사용하십시오.

또는 BASE HTML element을 사용하여 상대 URL이 확인되는 기본 URL을 변경하십시오. 그러나 이는 모두 상대 URL에 영향을 미칩니다.

Problem using URL rewrite (Relative Paths not working)mod_rewrite URL info required도 참조하십시오.

관련 문제