0

大家好,我有这个问题,因为我的重写规则如下所示。但是每次我使用这段代码时,js文件都不起作用。

RewriteRule ^([^thumb].*\.[jJ].*)$ /images/files/w.php?i=$1

谁能告诉我哪里出错了?

4

2 回答 2

2

快速而肮脏的“解决方案”,因为您显然想将 jpeg 和 js 分开:

RewriteRule ^([^thumb].*\.[jJ][pP].*)$ /images/files/w.php?i=$1
于 2012-10-24T16:06:41.207 回答
2

为了处理不仅仅是jpgs,您可以将其更改为以下内容:

RewriteRule ^([^thumb].*\.(jpe?g|png|gif).*)$ /images/files/w.php?i=$1

这将涵盖jpg、和文件扩展名jpeg,但不匹配 javascript 文件。pnggif

注意:[^thumb].*不会匹配任何以t, h, u,mb, 开头的文件名(例如,test.jpg, home.jpg, umbrella.jpg, monster.jpg, 或beach.jpg不会匹配)不仅仅是以 , 开头的文件thumb...,对于整个单词, thumb,你需要一个否定的前瞻(?!regex)。要使规则不匹配以“thumb”开头的文件,规则应如下所示:

RewriteRule ^((?!thumb).*\.(jpe?g|png|gif).*)$ /images/files/w.php?i=$1

最后一个问题是规则处理文件扩展名之后的文本,我认为这意味着您可能拥有如下所示的网址:

http://www.example.com/test.png?foo=a&b=baz

您的规则将创建一个最终看起来像的重写

http://www.example.com/images/files/w.php?i=test.png?a=foo&b=baz

这不是一个有效的 url,因为?查询字符串中现在有两个 s。为了解决这个问题,我会使用以下正则表达式。

RewriteRule ^((?!thumb).*\.(?:jpe?g|png|gif))\??(.*)$ /images/files/w.php?i=$1&$2

此正则表达式规则将生成正确格式的 url

http://www.example.com/images/files/w.php?i=test.png&a=foo&b=baz

于 2012-10-24T16:16:07.040 回答