HTACCESS URL REGEX会正确重写文件,但不会缩小或其他具有多个句点的文件



我有一个重写规则,它大多有效。但我的问题是,我有很多文件中有一个以上的句点。我已经缩小了文件,我有如下的通用脚本文件:

jquery.dynamicform.js
bootstrap.min.js

我有一个重写规则,它利用了以下REGEX:

([^.]+.(jpeg|jpg|webp|webm|png|css|js))$

如果只有一个句点,那么这个正则表达式非常有效。以下是我的测试:

assets/css/styles.css
assets/css/bootstrap.min.css
assets/js/bootstrap.min.js
assets/js/scripts.js
assets/js/query.dynamicform.js

这在styles.cssscripts.js上给出了正确的结果,但在bootstrap.min.cssbootstrap.min.jsjquery.dynamicforms.js上没有给出正确的结果。

关于如何让这个正则表达式适用于所有这些用例,有什么想法吗?

我的RewriteRule特别被称为:

RewriteRule ([^.]+.(gif|jpeg|jpg|webp|webm|mp4|mp3|png|bmp|css|js|svg|bmp|woff|ttf))$ https://website.testing.dev/$1 [R=301,L,NC]
RewriteRule ([^.]+.(gif|jpeg|jpg|webp|webm|mp4|mp3|png|bmp|css|js|svg|bmp|woff|ttf))$ https://website.testing.dev/$1 [R=301,L,NC]

此正则表达式的问题是,给定对assets/css/bootstrap.min.css的请求,它将只匹配(并捕获(min.css,因为正则表达式[^.]+不包括点。

因此,您基本上希望此规则适用于所有请求,这些请求仅以指定的文件扩展名之一结尾,并重定向到替代域上的相同URL路径。在这种情况下,您可以简单地匹配文件扩展名,并在替换字符串中使用REQUEST_URI服务器变量。这样就避免了必须匹配整个URL路径。

例如(简化(:

RewriteRule .(gif|jpeg|jpg|css|js)$ https://website.testing.dev%{REQUEST_URI} [R=301,L,NC]

请注意,REQUEST_URI服务器变量已经包含斜杠前缀,因此在替换字符串中省略了它。


或者,要匹配所有(尽管可以说效率较低(,您应该匹配.+(所有(而不是[^.]+(除了一个点之外的所有(,然后您可以在替换字符串中使用反向引用,就像您所做的那样。

例如:

RewriteRule (.+.(gif|jpeg|jpg|css|js))$ https://website.testing.dev/$1 [R=301,L,NC]

相关内容

  • 没有找到相关文章

最新更新