您好我有一个重写规则我试图在我的本地主机上实现,但无论我如何设置正则表达式我都无法做到这一点
文件在这个命名方案 /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
答案 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