MOD_REWRITE 没有创建正确的路径

MOD_REWRITE 没有创建正确的路径

因此,我尝试在我的服务器上设置 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 等。

相关内容