如果是图像文件,RewriteRule会执行此操作,否则执行此操作

时间:2013-02-04 18:53:13

标签: .htaccess mod-rewrite rewrite yourls

我很难有这个工作.. 我已经安装了YOURLS,它是一个PHP脚本来缩短网址。 为了工作,它需要有这个:

            RewriteEngine On
            RewriteBase /
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(.*)$ /yourls-loader.php [L]

这里没问题。 但我也想使用与PHP脚本无关的图像托管目录。 它将检查请求的URL是否以.jpg | .jpeg | .gif | .png结尾,RewriteRule将重定向到/ imgshare / $ 1 我已经尝试了下面的代码但是在访问mysite.com/img.jpg时遇到了服务器错误,但是没有找到url重定向“mysite.com/y4Jd”:

    RewriteCond %{REQUEST_URI} !(\.jpg|\.jpeg|\.gif|\.png)$ [NC]
    RewriteRule ^(.*)$ /yourls-loader.php [L]
    RewriteCond %{REQUEST_URI} (\.jpg|\.jpeg|\.gif|\.png)$ [NC]
    RewriteRule ^(.*\.(jpeg|jpg|png|gif))$ /imgshare/$1 [L]

1 个答案:

答案 0 :(得分:0)

这不是问题,但作为一个注释,你的第二个RewriteCond已经匹配带有图像结尾的文件,所以不需要在RewriteRule中重复那个匹配。或者,不需要RewriteCond,因为它对RewriteRule来说是多余的。

然而,真正的问题可能是你在最终规则中有一个额外的斜线。 $ 1将包含从原始URL匹配的前导斜杠,因此您的规则当前在imgshare和文件名之间添加了两个斜杠。我会实现这样的规则:

RewriteCond %{REQUEST_URI} \.(jpg|jpeg|gif|png)$ [NC]
RewriteRule ^(.*)$ /imgshare$1 [L]