重写url时如何防止重写href属性?

时间:2009-10-14 00:53:06

标签: php .htaccess mod-rewrite

在我的网站上我想更改网址(只是例子):

site.com/showCategory.php?catId=34

为:

site.com/category/34/

以下是我的.htaccess文件的内容:

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

它有效,但问题是affichage.php中的所有网址(href标记)都有“/ affichage / 29 /”,而css文件的来源变为http://www.site.com/category/34/css/style.css

3 个答案:

答案 0 :(得分:3)

我添加此项以排除我想要直接访问的css和其他文件:

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

或者,按目录名排除:

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

答案 1 :(得分:0)

您必须再次输出该网址。然而,好的做法是用函数包装它。

e.g:

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

使用switch语句可以添加更多url解析。此外,使用此包装函数,您可以轻松地在旧URL和新URL之间切换。

答案 2 :(得分:0)

这是一个解决网址问题。在引用外部资源时,您需要使用绝对URL(或至少是绝对URL路径)。使用绝对网址路径/css/…代替相对css/…./css/…

或者您使用BASE HTML element更改了相对URL的基本网址。但请注意,这会影响所有相对网址。

另请参阅Problem using URL rewrite (Relative Paths not working)mod_rewrite URL info required