大家好,我有这个问题,因为我的重写规则如下所示。但是每次我使用这段代码时,js文件都不起作用。
RewriteRule ^([^thumb].*\.[jJ].*)$ /images/files/w.php?i=$1
谁能告诉我哪里出错了?
快速而肮脏的“解决方案”,因为您显然想将 jpeg 和 js 分开:
RewriteRule ^([^thumb].*\.[jJ][pP].*)$ /images/files/w.php?i=$1
为了处理不仅仅是jpgs,您可以将其更改为以下内容:
RewriteRule ^([^thumb].*\.(jpe?g|png|gif).*)$ /images/files/w.php?i=$1
这将涵盖jpg
、和文件扩展名jpeg
,但不匹配 javascript 文件。png
gif
注意:[^thumb].*
不会匹配任何以t
, h
, u
,m
或b
, 开头的文件名(例如,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