RewriteRule不工作不知道如何测试正则表达式匹配

时间:2011-01-05 20:55:21

标签: regex .htaccess mod-rewrite apache

您好我有一个重写规则我试图在我的本地主机上实现,但无论我如何设置正则表达式我都无法做到这一点

文件在这个命名方案 /docroot/css/stylesheet.min.css 中,我将它们打印在代码中,如 /docroot/css/stylesheet.min.123438348。 css (这个数字来自一个获得修改的函数)。注意docroot是一个示例目录

如何让服务器忽略这些数字并重定向到stylesheet.min.css 我需要为每个css和js文件(/ js和/ css)以及一个特定的spritemap图像执行此操作

我目前的尝试

RewriteRule ^/(docroot)/(js|css)/(.+)\.(min)\.(.+)\.(js|css)$ /$1/$2/$3.$4.$6
RewriteRule ^(/docroot/images/spritemap)\.([0-9]+)\.(png)$ $1.$3 

我把它包装在一个我在linux上...应该是mod_rewrite.so吗?“


所以我试图在我的服务器上设置RewriteRule来缓存静态对象。文件在这个命名方案/docroot/css/stylesheet.min.css中,我把它们打印在像/docroot/css/stylesheet.min.123438348.css这样的代码中(这个数字是来自一个get修改函数的例子) )。注意docroot是一个示例目录

如何让服务器忽略数字并重定向到stylesheet.min.css我需要为每个css和js文件(/ js和/ css)以及一个特定的spritemap图像执行此操作

我目前的尝试

RewriteRule ^/(docroot)/(js|css)/(.+).(min).(.+).(js|css)$ /$1/$2/$3.$4.$6 
RewriteRule ^(/docroot/images/spritemap).([0-9]+).(png)$ $1.$3

更新:现在我有这样的设置

<Location />
RewriteEngine on
Options FollowSymLinks
RewriteRule ^(.+)\.(min)\.([0-9]+)\.(js|css)$ $1.$2.$4 [L]
</Location>

这是将localhost / docroot / css / stylesheet.min.12343242.css重写为/var/www/html/docroot/trunk/docroot/css/stylesheet.min.css

所以它正在获取正确的文件如何让apache取消/ var / www / html / docroot / trunk /

的开头
<Location />
    RewriteEngine on
    RewriteBase /
    RewriteRule ^(.+)\.(min)\.([0-9]+)\.(js|css)$ $1.$2.$4 [PT]
</Location>

目录列表中的选项FollowSymLinks

现在好了,而不是

/var/www/html/docroot/trunk/docroot/css/stylesheet.min.css 

我得到的网址看起来像这样

/docroot/trunk/docroot/css/stylesheet.min.css

我删除了RewriteBase命令,所以我仍然需要删除开头/ docroot / trunk

1 个答案:

答案 0 :(得分:0)

per-directory rewrites的规则模式与全局重写规则的模式不同:

  
      
  • 在.htaccess文件中使用重写引擎时,每个目录前缀(对于特定目录始终相同)会自动删除以进行RewriteRule模式匹配并自动< em>在任何相对(不是以斜杠或协议名称开头)之后添加替换遇到规则集的结尾。有关将哪些前缀添加回相关替换的更多信息,请参阅RewriteBase指令。
  •   
  • 删除的前缀始终以斜杠结尾,这意味着匹配对于从不具有前导斜杠的字符串。因此,带有^/ Pattern 在每个目录上下文中永远不会匹配。
  •   

请尝试使用不带前导前缀/的这些模式:

RewriteRule ^(docroot)/(js|css)/(.+)\.(min)\.(.+)\.(js|css)$ /$1/$2/$3.$4.$6
RewriteRule ^(docroot/images/spritemap)\.([0-9]+)\.(png)$ $1.$3