如何从mod_rewrite规则中排除CSS,JS,JPG,GIF文件?

这是我迄今为止:

RewriteRule ^([A-Za-z0-9_]*)/?$ index.php?page=$1 [NC] RewriteRule ^([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/?$ index.php?page=$1/$2 [NC] RewriteRule ^([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/([A-Za-z0-9_]*)/?$ index.php?page=$1/$2/$3 [NC] 

我所有的CSS文件都位于/ ssi /中。

网站结构本身是/index.php?page=$whatever

$ whatever有时包括/,所以如果我去/无论/无论2,与我目前的规则,它假定CSS位于/whatever/ssi/*.css。

我希望这一切都有道理。

所以,基本上我只是想写一个条件,说:“如果这是一个CSS文件,不适用这些规则”。

感谢您的帮助,我可以得到:)。

你遇到的问题不是mod_rewrite被应用到css文件,而是你的CSS的路径是相对的。 浏览器只是从正确的相对路径请求css。 你真的有两个选择。

  1. 让你的路径到你的CSS相对于域而不是页面(例如使用/ssi/styles.css而不是ssi / styles.css)
  2. 创建一个重写规则,将所有的CSS重定向到正确的URL。 (例如RewriteRule(* .css)/ ssi / $ 1

预计你使用Apache mod_rewrite模块,你应该尝试RewriteCond指令。 以下示例从RewriteCond中排除了与RewriteRule指令相符的所有匹配项。 规则基本上是正则表达式。 在我的例子中,排除了所有以favicon.ico开始的所有内容,以及CSS样式表所在的文件夹。

 RewriteEngine On RewriteCond $1 !^(favicon\.ico|favicon\.png|media|robots\.txt|crossdomain\.xml|css|js) RewriteRule ^(.*)$ index.php/$1 [L] 

进一步阅读: http : //httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond

…它假定CSS位于/whatever/ssi/*.css。
我只是想写一个条件,说:“如果这是一个CSS文件,不适用这些规则”。

这直接转换为

 RewriteCond %{REQUEST_URI} !^/whatever/ssi/[^/]+\.css$ RewriteRule ... 

我想我的解决方案将是最经验的,但它的工作:

 RewriteEngine On RewriteBase / RewriteRule ^([a-z0-9-]+)$ /?page=$1 [NC,L] RewriteRule ^([a-z0-9-]+)/([a-z0-9-]+)$ /?page=$1&action=$2 [NC,L] 

这将翻译http://example.com/?page=contact&action=send到http://example.com/contact/send我的页面值只有字母数字和包含减号作为分隔符,但你可以替换值匹配无论你需要什么。

而且,当然你需要在页面中用斜杠来加上所有的js,css,img目录。 所以css / style.css应该是/css/style.css或者使用绝对url。