如何更改重写规则以仅读取图像

时间:2012-10-24 16:03:22

标签: php .htaccess

大家好我有这个问题,因为我的重写规则如下所示。但每当我使用此代码时,js文件都无法正常工作。

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

谁能告诉我哪里出错了?

2 个答案:

答案 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

这将涵盖jpgjpegpnggif文件扩展名,但不匹配javascript文件。

注意:[^thumb].*与以thumb开头的任何文件名都不匹配, (例如,test.jpghome.jpgumbrella.jpgmonster.jpgbeach.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