大家好我有这个问题,因为我的重写规则如下所示。但每当我使用此代码时,js文件都无法正常工作。
RewriteRule ^([^thumb].*\.[jJ].*)$ /images/files/w.php?i=$1
谁能告诉我哪里出错了?
答案 0 :(得分:2)
快速而肮脏的“解决方案”,因为你显然想分开jpeg和js:
RewriteRule ^([^thumb].*\.[jJ][pP].*)$ /images/files/w.php?i=$1
答案 1 :(得分:2)
为了处理不仅仅是jpgs,您可以将其更改为以下内容:
RewriteRule ^([^thumb].*\.(jpe?g|png|gif).*)$ /images/files/w.php?i=$1
这将涵盖jpg
,jpeg
,png
和gif
文件扩展名,但不匹配javascript文件。
注意:[^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
这不是有效的网址,因为查询字符串中现在有两个?
。为了解决这个问题,我将使用以下正则表达式。
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