因此,我尝试在我的服务器上设置 RewriteRule 来缓存静态对象。这些文件采用此命名方案 /docroot/css/stylesheet.min.css,我将它们打印在代码中,如 /docroot/css/stylesheet.min.123438348.css(该数字是示例,它来自获取修改函数)。注意 docroot 是一个示例目录
我怎样才能让服务器忽略数字并重定向到 stylesheet.min.css 我需要对每个 css 和 js 文件(/js 和 /css)以及一个特定的 spritemap 图像执行此操作
我目前的尝试
重写规则 ^/(docroot)/(js|css)/(.+)\.(min)\.(.+)\.(js|css)$ /$1/$2/$3.$4.$6 重写规则 ^(/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
我建议尝试以下操作:
RewriteRule ^/(.+min)\.([0-9]+)\.(js|css)$ /$1.$3 [PT]
Apache 有时会在未设置标志时出现不可预测的行为。我建议每次都明确设置它。此外,正则表达式中的句点字符必须转义 - 否则它们会被视为“任何字符”。
我还建议阅读此处有关 mod_rewrite 的官方 Apache 文档:http://httpd.apache.org/docs/current/mod/mod_rewrite.html
答案2
永远不要在里面使用 Rewrite 指令<Location>
——如果您不使用 htaccess,则只需在虚拟主机上下文中使用它们。这大大简化了使用 mod_rewrite 的每个方面,并且无需剥离每个目录的前缀、RewriteBase 等。