2010-09-13 62 views
3

这是我到目前为止有:如何从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

$无论有时包括/人的,所以如果我去/不管/ whatever2,我目前的规则,它假设CSS是位于/whatever/ssi/*.css。

我希望所有这些都有道理。

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

谢谢你的任何帮助,我可以得到:)。

+0

知道了所有的设置,似乎在游泳。感谢你的帮助,每个人:)。 – Will 2010-09-13 18:40:37

回答

4

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

  1. 你的路到CSS相对于域的,而不是页面(如使用/ssi/styles.css代替SSI/Styles.css中)
  2. 创建重写规则,以所有的CSS重定向到正确的网址。 (例如,重写规则(*的CSS)/ SSI/$ 1
+0

我相信你现在是对的,我认为更多。我正在使用XAMPP和一个项目文件夹。所以当我做href =“ssi/main.css”时,它会将其附加到当前的url,这是错误的。如果我做href =“/ ssi/main.css”,它会执行http://localhost/ssi/main.css。它应该去http://localhost/projects/asdf/ssi/main.css。有没有什么办法可以设置XAMPP/apache来使用基于项目文件夹的多个根目录? – Will 2010-09-13 15:52:48

+0

不,我不认为你可以有一个项目的多个根目录。但是如果你所有的css真的都在/ ssi中,为什么不简单地创建路径/ssi/*.css? – cleek 2010-09-13 16:04:11

+0

因为,正如我所说,我有多个项目。所以,如果我这样做,它会指向http://localhost/ssi/*.css而不是http://localhost/projects/asdf/ssi/*.css,它实际上位于其中。 – Will 2010-09-13 16:07:53

0

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

这意味着直接

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

预见你使用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

+0

非常感谢。我相信我的问题已经缩小到更多的是在我的标记中有相对路径。我正在运行带有项目文件夹的XAMPP,所以如果我做/ssi/main.css,它应该是http:// localhost/projects/asdf/ssi/main时执行http://localhost/ssi/main.css的CSS。有什么办法可以解决这个问题吗? – Will 2010-09-13 15:56:14

0

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

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=sendhttp://example.com/contact/send 我的页面值分别只有字母,数字和包含减号作为字分隔符,但你可以替换值以匹配你需要的任何东西。

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