这是我到目前为止所做的:
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
$无论有时包含/,所以如果我使用我当前的规则去/ what / whatever2,它假设css位于/ whatever / ssi / *。css。
我希望所有这一切都有道理。
所以,基本上我只想写一个条件,说“如果它是一个css文件,不要应用这些规则。”
感谢您提供的任何帮助:)。
答案 0 :(得分:4)
您遇到的问题不是将mod_rewrite应用于css文件,而是将html中的路径应用于css是相对的。浏览器只是从正确的相对路径请求css。你真的有两个选择。
答案 1 :(得分:3)
预计您正在使用带有mod_rewrite模块的Apache,您应该尝试使用RewriteCond指令。以下示例使用RewriteRule指令从RewriteCond中排除以下行的所有匹配项。 规则基本上是正则表达式。我的示例中的那个排除了以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
答案 2 :(得分:0)
...它假设css位于/whatever/ssi/*.css。
我只想写一个条件,说“如果它是一个css文件,不要应用这些规则。”
这直接转换为
RewriteCond %{REQUEST_URI} !^/whatever/ssi/[^/]+\.css$
RewriteRule ...
答案 3 :(得分: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=send翻译为http://example.com/contact/send 我的页面值只是字母数字,并且包含减号作为单词分隔符,但您可以替换值以匹配您需要的任何值。
当然,您需要在页面中使用斜杠为所有js,css,img目录添加前缀。所以css / style.css是/css/style.css或使用绝对网址。